USACO 2019 February Contest Platinum T1: Cow Dating

题目大意

由于目前可供奶牛们使用的约会网站并没有给Farmer John留下深刻印象,他决定推出一个基于新匹配算法的奶牛交友网站,该算法可基于公牛和母牛间的共同兴趣对公牛和母牛进行匹配。

Bessie在寻找情人节Barn Dance的合作伙伴时,决定试用这个网站。在注册账户之后,FJ的算法为他给出了一个长度为 N(1≤N≤1e6) 的匹配列表,列表上每头公牛接受她舞蹈邀请的概率为 p (0 < p < 1)。

Bessie决定向列表中的一个连续区间内的奶牛发送邀请,但Bessie希望恰好只有一个奶牛接受邀请。请帮助Bessie求出恰好只有一个奶牛接受邀请的最大概率是多少。

题目分析

令 p表示第i个位置是1的概率,那么1~i 这 i 个数都不选的概率 s?= ∏ik=1? (1−pk?) , 1~i 中只选 i 这个数的概率为 si * ti?  ( ti?=∑ik=1 (1−pk) / ?pk??)

那么显然把只选区间 [ l, r ] 中一个数的答案加起来得区间的答案为? sr/sl-1? ?(tr?−tl1?)

固定右端点r,直观感觉到随着l的左移,乘积第二项变大,乘积第一项变小。

那么总的答案为 (1-p1)(1-p2)..(1-pn) * ( p1/(1-p1) + p2/(1-p2) + ... + pn/(1-pn) )

我们可以发现,右端点的取值是单调递增的

于是,我们可以极限一下,用一个双指针法,类似于队列。

记录两个变量,表示和 与 积即可。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int MAXN=1e6+10;
 4 typedef long double ld;
 5
 6 int n;
 7 ld a[MAXN],ans,pro,sum;
 8 inline int read(){
 9     int x=0,f=1;char ch=getchar();
10     while(ch<‘0‘||ch>‘9‘){
11         if(ch==‘-‘) f=-1;
12         ch=getchar();
13     }
14     while(ch>=‘0‘&&ch<=‘9‘){
15         x=x*10+ch-48;
16         ch=getchar();
17     }
18     return x*f;
19 }
20
21 int main(){
22     n=read();
23     for(int i=1;i<=n;++i){
24         a[i]=(ld)read();
25         a[i]/=1e6;
26         ans=max(ans,a[i]);
27     }
28     pro=1;sum=0;
29     int j=1;//i,j双指针。i左j右
30     for(int i=1;i<=n;++i){
31         while(j<=n&&pro*sum<pro*(1-a[j])*(sum+a[j]/(1-a[j]))){
32             pro*=(1-a[j]);
33             sum+=a[j]/(1-a[j]);
34             ++j;
35         }
36         //cout<<i<<‘ ‘<<j<<endl;
37         ans=max(ans,pro*sum);
38         pro/=(1-a[i]);
39         sum-=a[i]/(1-a[i]);
40     }
41     printf("%d\n",(int)(ans*1e6));
42     return 0;
43 }

原文地址:https://www.cnblogs.com/LI-dox/p/11223748.html

时间: 2024-11-07 06:37:43

USACO 2019 February Contest Platinum T1: Cow Dating的相关文章

USACO 2019 January Contest Platinum T3: Train Tracking 2

题目大意 每天特快列车都会经过农场.列车有N节车厢(1≤N≤10^5),每节车厢上有一个1到10^9之间的正整数编号:不同的车厢可能会有相同的编号. 平时,Bessie会观察驶过的列车,记录车厢的编号.但是今天雾实在太浓了,Bessie一个编号也看不见!幸运的是,她从城市里某个可靠的信息源获知了列车编号序列的所有滑动窗口中的最小值.具体地说,她得到了一个正整数K,以及N−K+1个正整数c1,…,cN+1−K,其中ci是车厢i,i+1,…,i+K−1之中编号的最小值. 帮助Bessie求出满足所有

USACO 2015 February Contest Gold T2: Censoring

题目大意 FJ把杂志上所有的文章摘抄了下来并把它变成了一个长度不超过10^5的字符串S.他有一个包含n个单词的列表,列表里的n个单词记为t1...tN.他希望从S中删除这些单词. FJ每次在S中找到最早出现的列表中的单词(最早出现指该单词的开始位置最小),然后从S中删除这个单词.他重复这个操作直到S中没有列表里的单词为止.注意删除一个单词后可能会导致S中出现另一个列表中的单词 FJ注意到列表中的单词不会出现一个单词是另一个单词子串的情况,这意味着每个列表中的单词在S中出现的开始位置是互不相同的

USACO 2018 December Contest Platinum T2: Sort It Out

题目大意 FJ有 N(1≤N≤1e5 )头奶牛(分别用 1…N 编号)排成一行.FJ喜欢他的奶牛以升序排列,不幸的是现在她们的顺序被打乱了.在过去FJ曾经使用一些诸如“冒泡排序”的开创性的算法来使他的奶牛排好序,但今天他想偷个懒.取而代之,他会每次对着一头奶牛叫道“按顺序排好”.当一头奶牛被叫到的时候,她会确保自己在队伍中的顺序是正确的(从她的角度看来).当有一头紧接在她右边的奶牛的编号比她小,她们就交换位置.然后,当有一头紧接在她左边的奶牛的编号比她大,她们就交换位置.这样这头奶牛就完成了“按

USACO 2016 December Contest Gold T1: Moocast

题目大意 FJ的N头牛(1≤N≤1000)为了在他们之间传播信息, 想要组织一个"哞哞广播"系统. 奶牛们决定去用步话机装备自己而不是在很远的距离之外互相哞哞叫, 所以每一头奶牛都必须有一个步话机. 这些步话机都有一个限制传播半径, 但是奶牛们可以间接地通过中间奶牛传播信息, 所以并不是每头牛都必须直接向其他每一头奶牛连边. 奶牛们需要去决定多少钱花在步话机上, 如果他们花了$X, 那么他们都将会得到sqrt(x)距离的步话机. 所以, 两头牛之间的欧几里得距离平方最多是X. 请帮助奶

USACO 2017 December Contest Gold T1: A Pie for a Pie

题目大意 Bessie和Elsie各自烤了 N(1≤N≤10^5)个馅饼.Bessie 会这 2N 个馅饼打分,Elsie 也会.二者的打分均为一个 ≤1e9 的非负整数.由于她们口味不同,每个派的两个分数可能不同.她们想互赠礼物.开始时,Bessie 送给 Elsie 一个馅饼.她们收到礼物(对方做的馅饼)后都会回赠对方一个自己做的馅饼.她们选择回礼的方法相同.以 Elsie 为例,Elsie 根据自己的打分来选择回礼.回礼的分数至少要大于她收到的馅饼的分数,但两个馅饼的分数差不能大于 D(0

USACO 2017 December Contest Platinum T2: Push a Box

题目大意 一个谷仓是一个N*M的矩形网格,有一些网格里有干草.Bessie站在其中一个格子内,还有一个格子里有一个大木箱.Bessie不能和大木箱在一个格子里,也不能和干草在一个格子里. 如果她不与干草一个格子,她就可以往自己旁边的四个方向(东西南北)移动,如果她想移动到有木箱的格子里,那个木箱就会被她推一格(只要木箱的那个方向还有空间),如果没有空间,那Bessie就不能移动了. 给你谷仓的布局(空格子,干草以及木箱位置)以及Bessie的出发位置和箱子要被推到的位置,请你帮忙计算Bessie

USACO 2017 December Contest Platinum T3: Greedy Gift Takers

题目大意 有 N(1≤N≤1e5)头牛按顺序排成一列,编号从 1 到 N,1 号牛在队头,N 号牛在队尾. 每次位于队头的牛 i 拿到一个礼物,然后插入到从队尾数ci?头牛之前的位置..举个栗子: 初始队列 1,2,3,4,5 c1?= 2,c2? = 3,则第一次操作后的序列为 2,3,1,4,5,第二次操作后的序列为 3,2,1,4,5.重复无限次操作,求最后有几头牛拿不到礼物. 题目分析 一上来有个显然的结论,若一个人得不到礼物那么原序列中在他后面的人肯定也得不到礼物,因为后面的人跳不到前

6546. 【GDOI2020模拟4.8】USACO 2020 Open Contest, Platinum(circus)

题目描述 Farmer John 马戏团的 N 头奶牛( 1 ≤ N ≤ 10^5 )正在准备她们接下来的演出.演出在一棵结点编号为 1 - N 的树上进行.演出的"起始状态"可以定义为一个整数 1 ≤ K ≤ N 以及奶牛 1 - K 在树上的结点分布,使得没有两头奶牛位于相同的结点. 在一场演出中,奶牛们可以进行任意次数的"移动".在一次移动中,一头奶牛从她的当前所在结点移动到一个未被占据的相邻结点.称两个起始状态是等价的,如果一个状态可以通过一系列移动到达另一

【AtCoder】diverta 2019 Programming Contest

diverta 2019 Programming Contest 因为评测机的缘故--它unrated了.. A - Consecutive Integers #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define mp make_pair #define pb push_back #define space putchar(' ') #define