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 优先队列的更多相关文章

  1. 2018-2019 ICPC, NEERC, Southern Subregional Contest

    目录 2018-2019 ICPC, NEERC, Southern Subregional Contest (Codeforces 1070) A.Find a Number(BFS) C.Clou ...

  2. Codeforces 2018-2019 ICPC, NEERC, Southern Subregional Contest

    2018-2019 ICPC, NEERC, Southern Subregional Contest 闲谈: 被操哥和男神带飞的一场ACM,第一把做了这么多题,荣幸成为7题队,虽然比赛的时候频频出锅 ...

  3. 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 ...

  4. Codeforces1070 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred)总结

    第一次打ACM比赛,和yyf两个人一起搞事情 感觉被两个学长队暴打的好惨啊 然后我一直做傻子题,yyf一直在切神仙题 然后放一波题解(部分) A. Find a Number LINK 题目大意 给你 ...

  5. codeforce1070 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred) 题解

    秉承ACM团队合作的思想懒,这篇blog只有部分题解,剩余的请前往星感大神Star_Feel的blog食用(表示男神汉克斯更懒不屑于写我们分别代写了下...) C. Cloud Computing 扫 ...

  6. 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, ...

  7. 2018.10.20 2018-2019 ICPC,NEERC,Southern Subregional Contest(Online Mirror, ACM-ICPC Rules)

    i207M的“怕不是一个小时就要弃疗的flag”并没有生效,这次居然写到了最后,好评=.= 然而可能是退役前和i207M的最后一场比赛了TAT 不过打得真的好爽啊QAQ 最终结果: 看见那几个罚时没, ...

  8. 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$ 思路: 定义一个二元组$< ...

  9. 【*2000】【2018-2019 ICPC, NEERC, Southern Subregional Contest C 】Cloud Computing

    [链接] 我是链接,点我呀:) [题意] [题解] 我们可以很容易知道区间的每个位置有哪些安排可以用. 显然 我们优先用那些花费的钱比较少的租用cpu方案. 但一个方案可供租用的cpu有限. 我们可以 ...

随机推荐

  1. JAVA 位操作学习

    一,基础知识 计算机中数值的编码方式中,原码.反码.补码. 正数的补码与原码相同,负数的补码为:负数的原码符号位不变,其它位取反,再加1. 在计算机中,数值是以补码的形式存储的.补码的好处: ①用补码 ...

  2. [原]Android Fragment 入门介绍

    Fragment Fragment 产生,优点,用途,使用方法简介 1 Fragmeng简介 自从Android 3.0中引入fragments 的概念,根据词海的翻译可以译为:碎片.片段.其上的是为 ...

  3. 怎样提高WebService的性能

    服务器端WebService程序: using System.Runtime.Serialization.Formatters.Binary; using System.IO; using Syste ...

  4. [转]使用 mitmproxy + python 做拦截代理

    使用 mitmproxy + python 做拦截代理   本文是一个较为完整的 mitmproxy 教程,侧重于介绍如何开发拦截脚本,帮助读者能够快速得到一个自定义的代理工具. 本文假设读者有基本的 ...

  5. 公司软raid问题

    RAID的技术介绍: stripe width(条带宽度):RAID中的磁盘数,就是组成这个stripe的磁盘数.如,4个磁盘组成的RAID 0,条带宽度就是4. stripe depth(条带深度) ...

  6. 替换openjdk的版本时遇到报错Transaction check error

    x想要使用jmap对jvm内存进行排查问题,但是默认安装的openjdk包中并不带有这个命令,需要新升级到新版本才有 而在安装新的版本时,遇到报错: :   file /usr/lib64/libns ...

  7. java虚拟机规范(se8)——java虚拟机结构(三)

    2.6. 栈帧 栈帧用于存储数据和部分结果,同样也用于执行动态链接,返回方法的值和分派异常. 当方法被调用的时候会创建一个新的栈帧.当一个方法调用结束时,它对应的栈帧就被销毁了,不管是正常调用结束还是 ...

  8. JavaScript如何获得input元素value值

    转载地址:http://aquarius-zf.iteye.com/blog/605144 在页面中我们最常见的页面元素就是input了,但是我们如何用JavaScript得到网页input中输入的v ...

  9. Faster R-CNN在GPU下的安装、测试经历

    在公司的服务器上安装faster rcnn时,遇到了不少问题: 1.cudnn版本不兼容的问题,解决办法参考: http://blog.csdn.net/WoPawn/article/details/ ...

  10. 上传文件异常问题 | 413 Request Entity Too Large

    开发中遇到这样的问题:一个上传文件的功能,内网测试都正常了,但是发布到外网就无法上传大点的(大于1MB)文件,更奇怪的是,后台还没有任何的异常信息. 于是就用Http抓包工具(HttpDetect)看 ...