Gym
来源:互联网 发布:kf5雾化器做芯数据 编辑:程序博客网 时间:2024/06/05 20:26
输入有人数 和一道题的分数
在输入每个人的当前分数和 他做不对这道题的概率
问有实现反超的概率(每个人的反超概率相加)
因为考虑到加法原理,所以这种概率是可以累加的,
还有一种情况就是,如果分数是10分,一个人15,一个人2分,那么即使那个人作对了题 12<15仍然无法实现反超。
思路,二分,求出 a[i]—a[i]+sa(题目分数)这其中的概率相加(都是做不对的概率哦),然后再乘以 本a[i]哥能作对这道题的概率。
#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; //由对upper的理解可以知道,这里返回的是第一个小于等于a[i]de; //因为是降序,所以一定是a[i]; //但是如果好几个数都一样就错了。 //int r=i; ans+=(sum[r]-sum[l])*(1.0-p[i]); } printf("%.9f\n",ans); return 0;}
0 0
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- c语言实现循环单链表
- 数据结构学习日记之Maximum Subsequence Sum
- vm网卡桥接模式时宿主机ping不通虚拟机的解决办法
- 第二届全球大数据峰会(GBDC2017)5月在成都召开!
- postgresql服务端安装(yum)
- Gym
- 数据压缩原理与应用 图像文件的读写和转换(BMP2YUV)实验报告
- Pandas 文本数据方法 get( )
- 仿360手机助手下载按钮
- FIFO学习
- JS之【基础知识】
- 超链接实现表单提交
- C# lock
- 团体程序设计天梯赛L1-022奇偶分家