2013-2014 ACM-ICPC, NEERC, Southern Subregional Contest Problem F. Judging Time Prediction 优先队列
Problem F. Judging Time Prediction
题目连接:
http://www.codeforces.com/gym/100253
Description
It is not easy to predict. Do you know that the modern weather prediction is marginally better than to
use the previous day weather as a prediction for the next day?
This problem is about judging a submission on a programming contest like ACM-ICPC. Suppose there is
a single submission for the problem containing n tests. Based on the previous statistics for each test we
know ti the expected time to judge on it and pi the probability of a submission to pass the test.
There are m judging machines in the system. They are completely independent and are used to judge a
submission on multiple tests at the same time. They work as follows. Each time a judging machine has
no task (has just started or nished processing the previous job), it chooses the unprocessed test with the
smallest number and judges submission on the chosen test. If it was judged on the i-th test, then after
time ti the verdict will be known. As it was written above, the probability that a submission passes the
test is pi
.
Let's assume that the judging process starts at the same moment when all the judging machines start. So
at this moment the rst min(m, n) tests start on the judging machines.
You know that on ACM-ICPC contests it is not necessary to judge a submission on all tests. The judging
process will be aborted at the rst moment when two conditions are met at the same time:
• the solution was judged on some test (say, x) and didn't pass it,
• the solution was judged on all the tests 1, 2, . . . , x − 1 and passed all of them.
Naturally, if all the tests are judged and passed the judging process ends too.
Write a program to print the expected time to judge a submission. It means that you are to nd the
mathematical expectation of the judging time according to the specied model.
Input
The rst line of the input contains two integer numbers n and m (1 ≤ n ≤ 3 · 105
, 1 ≤ m ≤ 3 · 105
) the
number of tests and judging machines. The following n lines contain pairs of integers ti and real numbers
pi (1 ≤ ti ≤ 100, 0 < pi < 1), where ti
is the time required to judge the i-th test and pi
is the probability
to pass the i-th test. The values pi are given with no more than 4 digits after the decimal point.
Output
Print the only real number e the expected time to judge the submission. Print it with at least 4 digits
after the decimal point.
Sample Input
2 1
1 0.5
2 0.5
Sample Output
2.0000000000
Hint
题意
有n组test,m个测评姬。
每个空闲的测评姬,会找到当前序号最小,没有测评姬测的测试点进行测试。
其中满足:
1.x测试点wa了
2.前面所有的测试点都测完了。
这个测试就会结束。
现在告诉你每个测评点需要的时间,以及通过的概率,问你期望测试时间。
题解:
拿一个优先队列,测出究竟是哪个测评姬测试这个测试点,以及这个测试点结束的时间。
那么对于第i个测评点的贡献,就是前缀最大值乘上这个测试点挂掉的概率。
代码
#include <bits/stdc++.h>
#define rep(a,b,c) for(int (a)=(b);(a)<=(c);++(a))
#define drep(a,b,c) for(int (a)=(b);(a)>=(c);--(a))
#define pb push_back
#define mp make_pair
#define sf scanf
#define pf printf
#define two(x) (1<<(x))
#define clr(x,y) memset((x),(y),sizeof((x)))
#define dbg(x) cout << #x << "=" << x << endl;
const int mod = 1e9 + 7;
int mul(int x,int y){return 1LL*x*y%mod;}
int qpow(int x , int y){int res=1;while(y){if(y&1) res=mul(res,x) ; y>>=1 ; x=mul(x,x);} return res;}
inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;}
using namespace std;
const int maxn = 3e5 + 500;
int N , K , t[maxn] ;
long long CompleteTime[maxn];
double prefixp[maxn];
double p[maxn];
double prob = 1.;
struct data{
long long x ;
int index;
friend bool operator < ( const data & a , const data & b ){ return a.x > b.x; }
data( long long x , int index ) : x(x) , index( index ) {}
};
priority_queue < data > Q;
int main(int argc,char *argv[]){
//freopen("in.txt" , "r" , stdin );
N = read() , K = read();
prefixp[0] = 1;
for(int i = 1 ; i <= N ; ++ i){
scanf("%d%lf" , t + i , p + i );
prefixp[i] = prefixp[ i - 1 ] * p[i];
}
for(int i = 1 ; i <= min( N , K ) ; ++ i){
Q.push( data( t[i] , i ) );
}
int ptr = min( N , K ) ;
double ans = 0;
while( !Q.empty() ){
data st = Q.top() ; Q.pop();
CompleteTime[st.index] = st.x;
++ ptr;
if( ptr <= N ) Q.push( data( st.x + t[ptr] , ptr ));
}
long long s = 0;
for(int i = 1 ; i <= N ; ++ i){
s = max( s , CompleteTime[i] );
ans += s * prefixp[i - 1] * ( 1. - p[i] ) ;
}
ans += s * prefixp[N];
pf("%.10lf\n" , ans);
return 0;
}
2013-2014 ACM-ICPC, NEERC, Southern Subregional Contest Problem F. Judging Time Prediction 优先队列的更多相关文章
- 2018-2019 ICPC, NEERC, Southern Subregional Contest
目录 2018-2019 ICPC, NEERC, Southern Subregional Contest (Codeforces 1070) A.Find a Number(BFS) C.Clou ...
- Codeforces 2018-2019 ICPC, NEERC, Southern Subregional Contest
2018-2019 ICPC, NEERC, Southern Subregional Contest 闲谈: 被操哥和男神带飞的一场ACM,第一把做了这么多题,荣幸成为7题队,虽然比赛的时候频频出锅 ...
- 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror) Solution
从这里开始 题目列表 瞎扯 Problem A Find a Number Problem B Berkomnadzor Problem C Cloud Computing Problem D Gar ...
- Codeforces1070 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred)总结
第一次打ACM比赛,和yyf两个人一起搞事情 感觉被两个学长队暴打的好惨啊 然后我一直做傻子题,yyf一直在切神仙题 然后放一波题解(部分) A. Find a Number LINK 题目大意 给你 ...
- codeforce1070 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred) 题解
秉承ACM团队合作的思想懒,这篇blog只有部分题解,剩余的请前往星感大神Star_Feel的blog食用(表示男神汉克斯更懒不屑于写我们分别代写了下...) C. Cloud Computing 扫 ...
- 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred)
A. Find a Number 找到一个树,可以被d整除,且数字和为s 记忆化搜索 static class S{ int mod,s; String str; public S(int mod, ...
- 2018.10.20 2018-2019 ICPC,NEERC,Southern Subregional Contest(Online Mirror, ACM-ICPC Rules)
i207M的“怕不是一个小时就要弃疗的flag”并没有生效,这次居然写到了最后,好评=.= 然而可能是退役前和i207M的最后一场比赛了TAT 不过打得真的好爽啊QAQ 最终结果: 看见那几个罚时没, ...
- 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred) Solution
A. Find a Number Solved By 2017212212083 题意:$找一个最小的n使得n % d == 0 并且 n 的每一位数字加起来之和为s$ 思路: 定义一个二元组$< ...
- 【*2000】【2018-2019 ICPC, NEERC, Southern Subregional Contest C 】Cloud Computing
[链接] 我是链接,点我呀:) [题意] [题解] 我们可以很容易知道区间的每个位置有哪些安排可以用. 显然 我们优先用那些花费的钱比较少的租用cpu方案. 但一个方案可供租用的cpu有限. 我们可以 ...
随机推荐
- win10内建子系统Linux
从cmd中下载linux和linux终端安装程序一样 最新要从商店购买(当然是免费) ubuntu openSUSE SUSE 3个 创建用户
- PHP中GET和POST区别
1. get是从服务器上获取数据,post是向服务器传送数据.2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到.post是通过H ...
- ftp 服务
ftp 上传下载 yum install ftp -y ftp:192.168.1.1 上传 put file1 下载 get file2 直接方式 ftp get test.tar.gz 文件 ft ...
- Contrastive Loss (对比损失)
参考链接:https://blog.csdn.net/yanqianglifei/article/details/82885477 https://blog.csdn.net/qq_37053885/ ...
- linux网络编程--Circular Buffer(Ring Buffer) 环形缓冲区的设计与实现【转】
转自:https://blog.csdn.net/yusiguyuan/article/details/18368095 1. 应用场景 网络编程中有这样一种场景:需要应用程序代码一边从TCP/IP协 ...
- 简单解读linux的/proc下的statm、maps、memmap 内存信息文件分析【转】
转自:https://blog.csdn.net/sctq8888/article/details/7398776 转载自:http://hi.baidu.com/deep_pro/blog/item ...
- urbuntu12.04 ftp服务器搭建
1.安装ftp服务器: sudo apt-get install vsftpd 2..配置ftp 修改ftp的配置文件,该文件在/etc目录下,在终端中键入如下命令以打开配置文件: sudo vi / ...
- OI 助手 | 简洁快速的 OI 工具箱 (原 竞赛目录生成)
原竞赛目录生成 (4.0 版本前) 开发者:abc2237512422 OI 助手是一个轻量简洁的 OI 工具箱.你可以使用它来快速进行 OI 竞赛中一些繁琐的操作,例如生成竞赛目录.对拍.它为你省去 ...
- 准备尝试openFrameworks
用PCL(Point Cloud Library)已经两年多,当时选择PCL的原因是适合使用的也仅仅知道CGAL和PCL,而CGAL太大,又无从下手,所以选择了PCL. 一开始安装和配置PCL就被虐的 ...
- docker重命名镜像
一.docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签)