DTOJ 4875. 西行寺无余涅槃

题意

西行寺幽幽子(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,2m1],最后得到的美味值为 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+k20,k10,0pi,j2m1,0ai<998244353

测试点编号 n ≤ n \le n m ≤ m \le m k ≤ k\le k
1 1 0 6 10^6 106191
2~3 1 0 3 10^3 1031010
4 1 0 6 10^6 106142
5 1 0 6 10^6 106162
6 1 0 6 10^6 106182
7 1 0 6 10^6 106103
8 1 0 6 10^6 106143
9 1 0 6 10^6 106173
10 5 × 1 0 5 5 \times 10^5 5×105124
11 5 × 1 0 5 5 \times 10^5 5×105164
12 5 × 1 0 5 5 \times 10^5 5×105105
13 5 × 1 0 5 5 \times 10^5 5×105155
14 2 × 1 0 5 2 \times 10^5 2×10586
15 2 × 1 0 5 2 \times 10^5 2×105146
16 2 × 1 0 5 2 \times 10^5 2×10567
17 2 × 1 0 5 2 \times 10^5 2×105137
18 1 0 5 10^5 10548
19 1 0 5 10^5 105128
20 1 0 5 10^5 105119

题解

直观的想法是把每个用餐计划看作一个 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 2k1个方程在加上所有情况和=n就形成 2 k 2^k 2k个方程和 2 k 2^k 2k个未知数,又发现这些方程的形式与 F W T FWT FWT很像,即对每个方程的右边一起构成的多项式做 I F W T IFWT IFWT即可求出每个未知数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值