当前位置 : 主页 > 网络编程 > PHP >

Gym - 101257G 24【二分+看题】

来源:互联网 收集:自由互联 发布时间:2023-09-06
题目链接:​​https://vjudge.net/problem/Gym-101257G​​​ 题意:有一道分值为sa的题,n个人一起写这道题,给出每个人的当前分数,和每个人写不出(一定要注意,比赛就是因为漏看了这里


题目链接:​​https://vjudge.net/problem/Gym-101257G​​​
题意:有一道分值为sa的题,n个人一起写这道题,给出每个人的当前分数,和每个人写不出(一定要注意,比赛就是因为漏看了这里,WA好多次)这道题的概率,,让你输出有反超现象出现的期望
解析:每个人的当前分数是按降序排列的,所以排最后的开始往前看,数值在(a[n-1]-1到a[n-2]+sa)这个区间的都是会有反超情况发生的,所以可以先前缀和处理概率,然后再用二分查找来获取需要乘的区间位置就好

#include <algorithm>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
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<n;i++)
scanf("%d",&a[i]);
for(int i=0;i<n;i++)
scanf("%lf",&p[i]);
sum[1] = p[0];
for(int i=1;i<n;i++)
sum[i+1] = sum[i]+p[i];
double ans = 0;
for(int i=0;i<n;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;
}


【文章原创作者:韩国高防服务器 http://www.558idc.com/krgf.html 网络转载请说明出处】
上一篇:CodeForces 831B Keyboard Layouts
下一篇:没有了
网友评论