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. bzoj千题计划293:bzoj3142: [Hnoi2013]数列

    http://www.lydsy.com/JudgeOnline/problem.php?id=3142 如果已知数列的差分数列a[1]~a[k-1] 那么这种差分方式对答案的贡献为 N-Σ a[i] ...

  2. 流媒体服务器之————EasyDarwin开源流媒体服务器:编译、配置、部署

    源码下载地址:https://github.com/EasyDarwin/EasyDarwin/archive/v7.0.5.zip 查看 Ubuntu 的版本号 sudo lsb_release - ...

  3. Excel VBA保护工作表

    '设定可编辑区域 ActiveSheet.Protection.AllowEditRanges.Add Title:="区域1", Range:=Range("E5:H1 ...

  4. 在一台win10上启动多个mysql

    1.因为项目需要用一个已经有数据的mysql,而我之前已经安装了一个mysql(之前的mysql上面也是有东西,不想删除)  想办法.... mysqld.exe --defaults-file=D: ...

  5. [转]mitmproxy套件使用攻略及定制化开发

    mitmproxy是一款支持HTTP(S)的中间人代理工具.不同于Fiddler2,burpsuite等类似功能工具,mitmproxy可在终端下运行.mitmproxy使用Python开发,是辅助w ...

  6. php ++测试

    2014年4月27日 12:17:47 结论暂时没有组织语言去表述,但是看看测试结果大家都会明白的 $x = 1; $y = empty($x) ? 3 : $x++; var_dump($x,$y) ...

  7. Java IO流杂谈

    创建文件和删除文件(File类) import java.io.File; import java.io.IOException; public class T2 { public static vo ...

  8. Linux屏幕记录命令script

    Script -a action.log –t 2> time.log按ctrl+d 退出录制回访 scriptreplay time.log action.log或者直接用查看命令cat,ta ...

  9. javaScript对金额处理的方式

    例如 var price = $("#price").val(); 此时price 为字符串格式 假使我们想将其乘以100 可以选择 price*100将其转换为数值格式 但是有些 ...

  10. java 缺憾:异常的丢失

    一.java的异常实现也是又缺陷的,异常作为程序出错的标志决不能被忽略,但它还是可能被轻易地忽略.下了可以看到前一个异常还没处理就抛出下一个异常,没有catch捕获异常,它被finally抛出下一个异 ...