题意
西行寺幽幽子(Saigyouji Yuyuko)是白玉楼的大小姐
幽幽子饿了,厨子妖梦准备了 k k k 类菜,第 i i i 类菜有 a i a_i ai 种
幽幽子有 n n n 个用餐计划,每个计划中幽幽子会选择一类菜中的一种吃掉,并获得一定的美味值
具体来说,如果幽幽子在第 i i i 次进食中选择了第 j j j 类菜,那么会获得的美味值
幽幽子最后获得的美味值是每次进食的美味值的异或和
幽幽子想尝试所有不同的美味值,所以她希望知道,对于每个 x ∈ [ 0 , 2 m − 1 ] x \in [0,2^m-1] x∈[0,2m−1],最后得到的美味值为 x x x 的方案数是多少
答案可能很大,你只需要求出答案对 998244353 998244353 998244353 取模之后的结果
对于所有的数据, m + k ≤ 20 , k ≤ 10 , 0 ≤ p i , j ≤ 2 m − 1 , 0 ≤ a i < 998244353 m + k \le 20,k \le 10,0 \le p_{i,j} \le 2^m − 1, 0 \le a_i< 998244353 m+k≤20,k≤10,0≤pi,j≤2m−1,0≤ai<998244353
测试点编号 | n ≤ n \le n≤ | m ≤ m \le m≤ | k ≤ k\le k≤ |
---|---|---|---|
1 | 1 0 6 10^6 106 | 19 | 1 |
2~3 | 1 0 3 10^3 103 | 10 | 10 |
4 | 1 0 6 10^6 106 | 14 | 2 |
5 | 1 0 6 10^6 106 | 16 | 2 |
6 | 1 0 6 10^6 106 | 18 | 2 |
7 | 1 0 6 10^6 106 | 10 | 3 |
8 | 1 0 6 10^6 106 | 14 | 3 |
9 | 1 0 6 10^6 106 | 17 | 3 |
10 | 5 × 1 0 5 5 \times 10^5 5×105 | 12 | 4 |
11 | 5 × 1 0 5 5 \times 10^5 5×105 | 16 | 4 |
12 | 5 × 1 0 5 5 \times 10^5 5×105 | 10 | 5 |
13 | 5 × 1 0 5 5 \times 10^5 5×105 | 15 | 5 |
14 | 2 × 1 0 5 2 \times 10^5 2×105 | 8 | 6 |
15 | 2 × 1 0 5 2 \times 10^5 2×105 | 14 | 6 |
16 | 2 × 1 0 5 2 \times 10^5 2×105 | 6 | 7 |
17 | 2 × 1 0 5 2 \times 10^5 2×105 | 13 | 7 |
18 | 1 0 5 10^5 105 | 4 | 8 |
19 | 1 0 5 10^5 105 | 12 | 8 |
20 | 1 0 5 10^5 105 | 11 | 9 |
题解
直观的想法是把每个用餐计划看作一个 2 m 2^m 2m的多项式,对它们分别求 F W T FWT FWT之后对应位相乘,再求 I F W T IFWT IFWT。
但这样效率不行,考虑如何对每一位较快地求出所有用餐计划的 F W T FWT FWT该位的值的乘积。由 F W T FWT FWT的定义发现每一位的值只有 2 k 2^{k} 2k种情况,考虑计算每一种情况的个数。
枚举 k k k类菜的每一个非空子集,在每个用餐计划中把对应位置下标异或起来的下标对应的值设为 1 1 1,把这 n n n个加起来做一遍 F W T FWT FWT,可以得到一个关于每种情况个数的方程。这 2 k − 1 2^k-1 2k−1个方程在加上所有情况和=n就形成 2 k 2^k 2k个方程和 2 k 2^k 2k个未知数,又发现这些方程的形式与 F W T FWT FWT很像,即对每个方程的右边一起构成的多项式做 I F W T IFWT IFWT即可求出每个未知数。