题意:输入个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 ",ans); 41 }