【做题记录】CF1096G Lucky Tickets
-
\(\text{CF1096G Lucky Tickets}\)
- 算法:\(\text{NTT}\)
题目:
一个 \(n\) 位数,每位可以是给出的 \(k\) 个数码中的一个数,可以有前导\(0\),输出前 \(n/2\) 位之和与后 \(n/2\) 之和相等的方案数,保证 \(n\) 是偶数。
输入的第一行是两个整数 \(n,k\),接下来的一行有 \(k\) 个数\(d_1,d_2,\cdots,d_k(0\leq d_i\leq 9)\)
输出一个数,为方案数模 \(998244353\) 的值。
\(2≤n≤2⋅10 ^5,1≤k≤10\)
题解:
设 \(f_{i,j}\) 表示 \(i\) 个数的和是 \(j\) 的方案数。
答案即为
\[\sum_k{(f_{ \frac{n}{2},k})^2}
\]
考虑 \(f\)。显然有转移
\[f_{x+1,k}=\sum_{i=0}^9 f_{x,k-i}
\]
然后老套路,反转 \(f\),设为 \(g\)。
\[\therefore f_{x+1,k}=\sum_{i=0}^{\min (k,9)}f_{x,i}\ g_{x,k-i}
\]
比较容易发现没有字符集限制的情况下 \(G=1\)
有限制的时候 \(g=\sum\limits_{i=0}^9{a_ix^i}\),\(a_i\) 表示 \(i\) 是否在允许的字符集中,\(x\) 没有实际意义
所以要做的就是求出 \(g\left( x \right) ^{\frac{n}{2}}\) 然后统计每一项系数的平方和