CodeForces Rockethon 2015 C 第二大期望
题意:从n个区间选一个数,求这n个数第二大的期望。
这他妈就是题意,只怪自己渣渣花了近一个小时看懂题意。
看懂题意就很明白了,就是枚举答案,然后算出选出这个答案的概率,当是开始打的时候还剩下20+分钟,打完发现样例不对,才知道有重复计算,第二天起来加了26和33行的判断轻松过了==
还是自己渣,早点看明白题意就能过了。
1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 using namespace std; 5 int l[6],r[6]; 6 int main() 7 { 8 int i,j,k,t,n,judge; 9 double sum,tmp; 10 scanf("%d",&n); 11 for (i=1;i<=n;i++) scanf("%d%d",&l[i],&r[i]); 12 sum=0.0; 13 for (i=1;i<=10000;i++) 14 { 15 for (j=1;j<=n;j++)//max 16 for (k=1;k<=n;k++)//second 17 { 18 judge=1; 19 if (j==k) judge=0; 20 if (r[j]<i) judge=0; 21 if (r[k]<i||l[k]>i) judge=0; 22 for (t=1;t<=n;t++) 23 if (t!=j&&t!=k&&l[t]>i) judge=0; 24 if (judge==0) continue; 25 if (l[j]<=i){ 26 if (k<j) tmp=1.0*(r[j]-i+1)/(r[j]-l[j]+1); 27 else tmp=1.0*(r[j]-i)/(r[j]-l[j]+1); 28 } 29 else tmp=1.0; 30 tmp=tmp/(r[k]-l[k]+1); 31 for (t=1;t<=n;t++) 32 if (t!=j&&t!=k&&r[t]>=i){ 33 if (t<k) tmp=tmp*(i-l[t]+1)/(r[t]-l[t]+1); 34 else tmp=tmp*(i-l[t])/(r[t]-l[t]+1); 35 } 36 // printf("num=%d max=%d second=%d %lf\n",i,j,k,tmp); 37 sum=sum+i*tmp; 38 } 39 } 40 printf("%.15lf\n",sum); 41 }