不难发现,对于一个区间 \([l, r]\),恰好只有一个奶牛接受邀请的概率为

\[\prod_{i=l}^r(1-p_i) \cdot \sum_{i=l}^r \frac {p_i} {1-p_i}
\]

设 \(m_a = \prod_{i=1}^a(1-p_i),\,s_a=\sum_{i=1}^a\frac{p_i}{1-p_i}\),那么上面的式子可以表示为

\[\frac{m_r}{m_{l - 1}}\cdot (s_r-s_{l-1})
\]

这个式子是凸的。它具有决策单调性,循环枚举 \(l\),里面的 \(r\) 一定是递增的。

  1. #include <cstdio>
  2. inline double max(const double& a, const double& b){
  3. return a > b ? a : b;
  4. }
  5. const int MAXN = 1e6 + 19;
  6. int r = 1;
  7. double p[MAXN], m = 1, s = 0, ans;
  8. int n;
  9. int main(){
  10. std::scanf("%d", &n);
  11. for(int i = 1; i <= n; ++i){
  12. std::scanf("%lf", p + i);
  13. p[i] /= 1e6;
  14. ans = max(ans, p[i]);
  15. }
  16. for(int l = 1; l <= n; ++l){
  17. while(r <= n && m * s <= m * (1 - p[r]) * (s + p[r] / (1 - p[r]))){//r 具有单调性
  18. m *= 1 - p[r];
  19. s += p[r] / (1 - p[r]);
  20. ++r;
  21. }
  22. ans = max(ans, m * s);//m * s 是选择[l,r]的概率
  23. m /= 1 - p[l];
  24. s -= p[l] / (1 - p[l]);//去除 l。
  25. }
  26. std::printf("%d\n", (int)(ans * 1e6));
  27. return 0;
  28. }

\(\quad\) 有点儿像斜率优化。

洛谷 P5242 [USACO19FEB]Cow Dating P的更多相关文章

  1. P5242 [USACO19FEB]Cow Dating

    题目链接 题意分析 首先我们可以得出计算公式 \[s_i=\prod_{k=1}^i(1-p_k)\] \[f_i=\sum_{k=1}^i\frac{p_k}{1-p_k}\] 那么 \[ans(i ...

  2. [洛谷P4183][USACO18JAN]Cow at Large P

    题目链接 Bzoj崩了之后在洛谷偶然找到的点分好题! 在暴力的角度来说,如果我们$O(n)$枚举根节点,有没有办法在$O(n)$的时间内找到答案呢? 此时如果用树形$dp$的想法,发现是可做的,因为可 ...

  3. 洛谷 P4183 - [USACO18JAN]Cow at Large P(点分治)

    洛谷题面传送门 点分治 hot tea. 首先考虑什么样的点能够对以 \(u\) 为根的答案产生 \(1\) 的贡献.我们考虑以 \(u\) 为根对整棵树进行一遍 DFS.那么对于一个点 \(v\), ...

  4. 洛谷P3611 [USACO17JAN]Cow Dance Show奶牛舞蹈

    题目描述 After several months of rehearsal, the cows are just about ready to put on their annual dance p ...

  5. 洛谷P3120 [USACO15FEB]Cow Hopscotch

    题目描述 Just like humans enjoy playing the game of Hopscotch, Farmer John&apos;s cows have invented ...

  6. 【洛谷P3014】Cow Line

    题目大意:康托展开和逆康托展开模板题. 题解: 注:20!约为 2e18. 代码如下 #include <bits/stdc++.h> using namespace std; const ...

  7. 【洛谷P2966】Cow Toll Paths

    题目大意:给定 N 个节点,M 条边的无向图,边有边权,点有点权,现给出 Q 个询问,每个询问查询两个节点之间的最短路径,这里最短路径的定义是两个节点之间的最短路径与这条路径中经过的节点点权的最大值之 ...

  8. [USACO19FEB]Cow Dating

    Luogu5242 通过观察数据,我们可以发现,右端点的取值是单调递增的.于是,我们可以极限一波,用一个双指针法,类似于队列. 右端点的取值满足以下公式: (1-p1)(1-p2)..(1-pn) * ...

  9. [USACO19FEB]Cow Dating——找规律

    原题戳这里 题解 显然原题等价于让我们求这个式子\(\prod\limits_{i=l}^{r}(1-p_i)\sum\limits_{i=l}^{r}\frac{p_i}{1-p_i}\)的最大值是 ...

随机推荐

  1. JavaScript学习笔记之二

    一 js与json数据格式的转换:序列号与反序列化 JSON.stringify(jsobj, '  ');//将js的obj转换为json对象: JSON.parse()把json对象变成一个Jav ...

  2. Tomcat部署Web项目的3种方式

    一.将war包丢进webapps 这是最简单粗暴的方式:将web工程打成war,丢进tomcat/webapps目录即可,tomcat会自动解压.无需修改任何配置文件即可完成部署. 这里我准备了tom ...

  3. Linux 一些有用的能力

    编程能力 Linux产生于一群真正的黑客.尽管人们习惯于认为Linus是Linux的缔造者,在linux包含的数以千计的文件中,也有一个名为Credits的文件记录了主要的Linux Hacker们的 ...

  4. java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time.....

    SpringBoot 2.1.4启动时报错 java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecogniz ...

  5. 洛谷P1192台阶问题(DP)

    题目描述 有NNN级的台阶,你一开始在底部,每次可以向上迈最多KKK级台阶(最少111级),问到达第NNN级台阶有多少种不同方式. 输入格式 两个正整数N,K. 输出格式 一个正整数,为不同方式数,由 ...

  6. 【剑指Offer面试编程题】题目1509:树中两个结点的最低公共祖先--九度OJ

    题目描述: 给定一棵树,同时给出树中的两个结点,求它们的最低公共祖先. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入的第一行为一个数n(0<n<1000),代表测试样例的个数 ...

  7. XCOJ 1008: 级数求和

    1008: 级数求和 题目描述 已知:Sn= 1+1/2+1/3+…+1/n.显然对于任意一个整数K,当n足够大的时候,Sn大于K.现给出一个整数K(1<=k<=15),要求计算出一个最小 ...

  8. input和button 高度不一致问题

    原因是 input和button的高度计算不一样, input高度不包括border. button高度包括border. 解决方法: 1.box-sizing:border-box: 2.borde ...

  9. [经验] 如何将 Java 项目发布到云服务器上并可以访问

    环境: 云服务器 Linux centos7.6 1: 安装 Tomcat  (apache-tomcat-9.0.26.tar.gz) 下载压缩包 --> 通过SSH上传到云服务器 --> ...

  10. centos 安装phpize

    yum -y install php-devel 然后 /usr/bin/phpize