codeforce 621C Wet Shark and Flowers

题意:输入个n和质数p,n个区间,每个区间可以等概率的任选一个数,如果选的这个区间和它下个区间选的数的积是p的倍数的话(n的下个是1),就挣2000,问挣的期望

思路:整体的期望可以分成每对之间的期望。期望=概率乘2000.

得到钱概率=1-得不到钱的概率

 1 #include<iostream>
 2 #include<string>
 3 #include<algorithm>
 4 #include<cstdlib>
 5 #include<cstdio>
 6 #include<set>
 7 #include<map>
 8 #include<vector>
 9 #include<cstring>
10 #include<stack>
11 #include<cmath>
12 #include<queue>
13 #include <bits/stdc++.h>
14 using namespace std;
15 #define INF 0x3f3f3f3f
16 #define ll long long
17 #define clc(a,b) memset(a,b,sizeof(a))
18 const int maxn=4010;
19 
20 double p[100010];
21 
22 int main()
23 {
24     int n,m,l,r;
25     scanf("%d%d",&n,&m);
26     for(int i=1;i<=n;i++)
27     {
28         scanf("%d%d",&l,&r);
29         int len=r/m-l/m;
30         if(l%m==0)
31             len++;
32         p[i]=1.0-(double)len/(r-l+1);
33     }
34     double ans=0;
35     for(int i=1;i<n;i++)
36     {
37         ans+=(1.0-p[i]*p[i+1])*2000;
38     }
39     ans+=(1.0-p[n]*p[1])*2000;
40     printf("%lf\n",ans);
41 }
View Code

 

你可能感兴趣的:(codeforce 621C Wet Shark and Flowers)