codeforces 1187F. Expected Square Beauty
Posted iamqzh233
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了codeforces 1187F. Expected Square Beauty相关的知识,希望对你有一定的参考价值。
求$E(B(x)^2)$,考虑$B(x)$为每一位与前一位不同的期望次数
令$A(x)$表示第$x$位与第$x-1$位不同的概率,特别地,$A(1)=1$
$$E(B(x)^2)=E((\sum_i=1^n A(i))^2)$$
把式子展开得,
$$E(B(x)^2)=\sum_i=1^n \sum_j=1^n E(A(i)\times A(j))$$
显然如果$|i-j|>1$,$A(i)$与$A(j)$是独立的,$E(A(i)\times A(j))=E(A(i))\times E(A(j))$
$A(x)$可以在$O(1)$的时间内算出来,$|i-j|>1$的情况也可以快速计算出来。
若$|i-j|=0$,$E(A(i)^2)=E(A(i))$。
剩下的我们就要统计$a_i-1\neq a_i且a_i\neq a_i+1$这样的概率。
可以用容斥$O(1)$计算出来。
1 #include <bits/stdc++.h> 2 using namespace std; 3 #define LL long long 4 #define MOD 1000000007 5 int l[200010], r[200010]; 6 int P[200010], sum[200010]; 7 inline int Power(int x, int y) 8 int ret = 1; 9 while(y) 10 if(y & 1) ret = 1ll * ret * x % MOD; 11 x = 1ll * x * x % MOD; y >>= 1; 12 13 return ret; 14 15 inline int min(int a, int b, int c) 16 return min(a, min(b, c)); 17 18 inline int max(int a, int b, int c) 19 return max(a, max(b, c)); 20 21 inline int calc(int l, int r) 22 if(l > r) return 0; 23 int ret = sum[r] - sum[l - 1] + MOD; 24 if(ret >= MOD) ret -= MOD; 25 return ret; 26 27 inline void Add(int &x, int y) 28 x += y; 29 if(x >= MOD) x -= MOD; 30 31 int main() 32 int n; 33 scanf("%d", &n); 34 for(int i = 1; i <= n; ++ i) 35 scanf("%d", &l[i]); 36 -- l[i]; 37 38 for(int i = 1; i <= n; ++ i) 39 scanf("%d", &r[i]); 40 41 P[1] = 1; 42 for(int i = 2; i <= n; ++ i) 43 int B = 1ll * (r[i - 1] - l[i - 1]) * (r[i] - l[i]) % MOD; 44 int A = min(r[i - 1], r[i]) - max(l[i - 1], l[i]); 45 if(A < 0) A = 0; 46 P[i] = 1ll * (B - A + MOD) * Power(B, MOD - 2) % MOD; 47 48 for(int i = 1; i <= n; ++ i) 49 sum[i] = sum[i - 1] + P[i]; 50 if(sum[i] >= MOD) sum[i] -= MOD; 51 52 int Ans = 0; 53 for(int i = 1; i <= n; ++ i) 54 Add(Ans, P[i]); 55 Add(Ans, 1ll * P[i] * calc(1, i - 2) % MOD); 56 Add(Ans, 1ll * P[i] * calc(i + 2, n) % MOD); 57 58 for(int i = 2; i <= n; ++ i) 59 if(i == 2) 60 Add(Ans, 2 * P[i] % MOD); 61 continue; 62 63 int E = 1; 64 E -= (1 - P[i] + MOD); 65 if(E < 0) E += MOD; 66 E -= (1 - P[i - 1] + MOD); 67 if(E < 0) E += MOD; 68 int B = 1ll * (r[i - 2] - l[i - 2]) * (r[i - 1] - l[i - 1]) % MOD * (r[i] - l[i]) % MOD; 69 int A = min(r[i - 2], r[i - 1], r[i]) - max(l[i - 2], l[i - 1], l[i]); 70 if(A < 0) A = 0; 71 E += 1ll * A * Power(B, MOD - 2) % MOD; 72 if(E >= MOD) E -= MOD; 73 Add(Ans, E * 2 % MOD); 74 75 printf("%d\n", Ans); 76
以上是关于codeforces 1187F. Expected Square Beauty的主要内容,如果未能解决你的问题,请参考以下文章
codeforces 1187 B Letters Shop
CodeForce - 1187 E. Tree Painting (换根dp)
CodeForces 1187E Tree Painting
Codeforces1187 B. Letters Shop(预处理)