CF1265E Beautiful Mirrors
solution
以前做过一道类似的题,这似乎是一种很经典的期望题。
设 \(dp_i\) 表示从第 \(i\) 面镜子到第 \(n\) 面镜子的期望天数。
转移柿子:
其中
\(dp_{n + 1} = 0\)
然后你会发现,这个柿子直接转移的话根本没法转移,求 \(dp_1\) 的时候要用到 \(dp_1\)。
开始推柿子:
从 \(dp_1\) :
\(dp_1 = p_1 \times dp_2 + (1 - p_1) \times dp_1 + 1\)
\(p_1 \times dp_1 = p_1 \times dp_2 + 1\)
\(dp_1 = dp_2 + \frac{1}{p_1}\)
然后是 \(dp_2\)
\(dp_2 = p_2 \times dp_3 + (1 - p_2) \times dp_1 + 1\)
\(dp_2 = p_2 \times dp_3 + (1 - p_2) \times (dp_2 + \frac{1}{p_1}) + 1\)
化简得到:
\(p_2 \times dp_2 = p_2 \times dp_3 + \frac{1}{p_1} - \frac{p_2}{p_1} + 1\)
\(dp_2 = dp_3 + \frac{1}{p_1 p_2} + \frac{1}{p_2} - \frac{1}{p_1}\)
于是
\(dp_1 = dp_3 + \frac{1}{p_1 p_2} + \frac{1}{p_2}\)
一直推下去得到:
\(dp_1 = dp_{i + 1} + \sum_{j = 1}^{i} \prod_{k = i - j + 1}^{i} \frac{1}{p_k}\)
后面那玩意就是
\(\frac{1}{p_1 p_2 \dots p_i} + \frac{1}{p_2p_3 \dots p_i}+ \dots + \frac{1}{p_{i - 1}p_i} + \frac{1}{p_o}\)
然后因为 \(dp_{n + 1} = 0\)
一直推到 \(n\) 就好了。
code
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXA = 1e4 + 5;
const int MAXB = 2e5 + 5;
const int MAXC = 1e6 + 5;
const int mod = 998244353;
int read() {
int x = 0, f = 1; char c = getchar();
while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}
while(c >= '0' && c <= '9') {x = x * 10 + c - '0';c = getchar();}
return x * f;
}
int a[MAXB], n, Ans, tmp = 1;
int quick_pow(int x, int y) {
int ret = 1;
while(y) {
if(y & 1) ret = (ret * x) % mod;
y >>= 1;
x = (x * x) % mod;
}
return ret;
}
signed main() {
n = read();
for (int i = 1; i <= n; i++) a[i] = read();
for (int i = n; i >= 1; i--) {
tmp = tmp * quick_pow(a[i], mod - 2) % mod * 100 % mod;
Ans = (Ans + tmp) % mod;
}
cout<<Ans;
return 0;
}

浙公网安备 33010602011771号