题意
你正在一个数轴上随机游走。一开始,你在位置 0 0 0。每一时刻,你有 $ \frac{1}{2}$ 的概率往左走,还有 1 2 \frac{1}{2} 21的概率往右走。定义一个方向系数 t t t,当你往左走时 t t t 为 − 1 -1 −1,反之往右走 t t t 为 + 1 +1 +1。同时,我们给定了一个长度为 N N N 的序列 A 1 , A 2 , … , A N A_1,A_2,…,A_N A1,A2,…,AN 。假如当前在位置 x x x ,那么在选定方向之后,下一步有 A k ∑ i = 1 N A i \frac{A_k}{\sum_{i=1}^{N}{A_i}} ∑i=1NAiAk 的概率在 x + t × k x+t \times k x+t×k。
假如走完之后,你落在了某一个位置 y < 0 y<0 y<0,那么你会直接到达 − y -y −y 的位置;假如你落在了某一个位置 y > N y>N y>N,那么你会直接到达 2 × N − y 2 \times N-y 2×N−y 的位置。
现在你按照上述规则,随机游走了 K K K步。请你求出,你最终到达每个点的概率在模 998244353 998244353 998244353 意义下的结果。显然,最终到达的一定是 0 0 0 到 N N N 之间的某一个整点。
Subtask 1 (3pts): K = 0 K=0 K=0。
Subtask 2 (12pts): N ≤ 100 , K ≤ 5000 N \le 100,K \le 5000 N≤100,K≤5000
Subtask 3 (23pts): N × K ≤ 5 × 1 0 5 N \times K \le 5 \times 10^{5} N×K≤5×105
Subtask 4 (11pts): $ \forall 2 \le i \le N,A_i=0$
Subtask 5 (27pts): N ≤ 1 0 3 N \le 10^3 N≤103
Subtask 6 (24pts):无特殊限制。
对于全部数据: 1 ≤ N ≤ 1 0 5 , 0 ≤ K ≤ 1 0 18 , 1 ≤ ∑ i = 1 N A i ≤ 1 0 8 1 \le N \le 10^5, 0 \le K \le 10^{18},1 \le \sum_{i=1}^{N}{A_i} \le 10^8 1≤N≤105,0≤K≤1018,1≤∑i=1NAi≤108
题解
考虑游走的过程,发现是一个碰壁就回退的循环,考虑构造循环卷积。如果循环节是n显然不太行,发现从 0 0 0到 n n n再回到 0 0 0可看作一个循环节,于是构造一个长度为 2 n 2n 2n的多项式, 0 0 0到 n n n项依次是 0 , . . . , n 0,...,n 0,...,n代表从 0 0 0走到 n n n,后 n − 1 n-1 n−1项依次是 n − 1 , . . . , 1 n-1,...,1 n−1,...,1代表从 n n n走到 0 0 0。由于两个方向的概率都是 1 / 2 1/2 1/2,这样向原来方向走相当于右移,向相反方向走相当于左移,如果越界的话则在 % 2 n \%2n %2n的意义下是等价的,故直接循环卷积快速幂即可。