Gym - 101257G 24【二分+看题】
发布时间:2023-10-23 00:02:08 412 相关标签:
题目链接:https://vjudge.net/problem/Gym-101257G
题意:有一道分值为sa的题,n个人一起写这道题,给出每个人的当前分数,和每个人写不出(一定要注意,比赛就是因为漏看了这里,WA好多次)这道题的概率,,让你输出有反超现象出现的期望
解析:每个人的当前分数是按降序排列的,所以排最后的开始往前看,数值在(a[n-1]-1到a[n-2]+sa)这个区间的都是会有反超情况发生的,所以可以先前缀和处理概率,然后再用二分查找来获取需要乘的区间位置就好
#include
#include
#include
#include
#include
using namespace std;
const int maxn = 2*1e5+100;
int a[maxn];
double p[maxn];
double sum[maxn];
bool cmp(const int &A,const int &B)
{
return A>B;
}
int main(void)
{
int n,sa;
memset(sum,0,sizeof(sum));
scanf("%d %d",&n,&sa);
for(int i=0;i scanf("%d",&a[i]);
for(int i=0;i scanf("%lf",&p[i]);
sum[1] = p[0];
for(int i=1;i sum[i+1] = sum[i]+p[i];
double ans = 0;
for(int i=0;i {
int l=upper_bound(a,a+i+1,a[i]+sa,cmp)-a;
int r=lower_bound(a,a+i+1,a[i],cmp)-a;
ans+=(sum[r]-sum[l])*(1.0-p[i]);
}
printf("%.9f\n",ans);
return 0;
}
文章来源: https://blog.51cto.com/u_11435021/5880021
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报