https://atcoder.jp/contests/abc309/tasks
Ex - Simple Path Counting Problem
N行 M列 grid
长K整数数组A
长L整数数组B
$f(i,j) =$从$(1,A_i)$移动到$(N,B_j)$恰好$(N-1)$次的路径方案数
其中每次移动$(+1,-1),(+1,+0),(+1,+1)$
求$\displaystyle \sum_{i\in[1,K]}\sum_{j\in[1,L]} f(i,j) \pmod{998244353}$
$1\le N\le 10^9$
$1 \le M,K,L,\le 10^5$
$1\le A_i,B_j\le M$
10 s
1024 MB
我的思路
这个 坐标的x始终+1,看起来没什么用啊
所以$f(i,j)$等价于 $A_i$变为$B_j$,且每次$+1/+0/-1$,过程中不超过$[1,M]$范围的恰好$N-1$次的方案数
如果 没有范围限制, 对于合法$X+Y*0-Z = B_j-A_i, X+Y+Z=N-1$的方案数有$\binom{N-1}{X,Z}$
$\displaystyle \sum_{Z=1}^{N-1} \frac{(N-1)!}{Z!(B_j-A_i+Z)!((N-1)-Z-(B_j-A_i+Z))!}$
其中令$\frac{1}{(<0)!} = 0$
这种情况 只和 $B_j-A_i$的值有关,可以预处理(所有差在$[-(M-1),+(M-1)]$内 )+统计(??????????????????)就可以
似乎连统计两个数组的所有差都不会??
好像 $f_A(x) = \sum count(A[i]=v)x^{-v}$
$f_B(x) = \sum count(B[i]=v)x^{v}$
$f_A(x)f_B(x)$ 应该就能统计
然后为了不要处理负, $f’_A(x) = x^{\max{v}} f_A(x)$即可
其实这里还有个问题是 N很大的话 暴力计算阶乘够吗?
那么回到题目, 当有范围限制要如何做呢?
似乎没有办法
但这里既然想到生成函数
$[x^j] f_i(x)$ 表示移动$i$次后路径值变为$j$的方案数
$f_0(x) = x^{A_i}$
$g(x) =$转移方程
$f_i(x) = g(f_{i-1}(x))$
求 $[x^{B_j}]f_{n-1}(x)$
好像 为了$[1,M]$的范围 还是要处理 两端..
一个想法是, 去计算 2的幂次的转移变化, 这样的话 对于N就是log级别了
但似乎 这会变成 $M * M$的矩阵,而不是一个简单的乘上一个函数