dp
考え方
操作が終わる方から決まるので,$N$から小さい順に考える.- $\mathrm{dp}[i]=i$が出たあとでもらえる給料の期待値.
- $\mathrm{dp}[N]=A[N]$
- $\displaystyle \mathrm{dp}[i] = A[i] + \sum_{j=i+1}^{N}\mathrm{dp} [j] \times \frac{1}{N}$
答えは$ \displaystyle \sum_{j=1}^{N}\mathrm{dp} [j] \times \frac{1}{N}$
回答例
modの逆数 - 競プロはじめましたを参照.N = int(input()) A = list(map(int, input().split())) mod = 998244353 invN = pow(N, mod - 2, mod) dp = [0] * N dp[-1] = A[-1] SUM = A[-1] for i in range(N - 1): dp[-1 - i - 1] = A[-1 - i - 1] + SUM * invN dp[-1 - i - 1] %= mod SUM += dp[-1 - i - 1] SUM %= mod print((SUM * invN) % mod)