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 }
View Code

题目链接:http://codeforces.com/contest/513/problem/C

posted on 2015-02-08 16:25  xiao_xin  阅读(160)  评论(0编辑  收藏  举报

导航