验题人/参赛者题解 | F Broken LED Lights

验题人(我)的做法:

对灯管进行状压后,枚举每两个数,状态相同的灯管集合。

设第 盏灯和第 盏灯的状态相同的灯管集合为 ,那么答案(即保留的灯管集合)不能为任意 的子集,这启发我们考虑对 卷积(即高维后缀和)。时间复杂度为 ,不能通过。

对于 的每个元素,我们只关心它是否为 。这启发我们使用 去优化。对于每个二进制位 ,使用一个 去记录位运算卷积的系数。具体地,对于每个状态 ,如果它的第 位为 ,就把第 位设置为 。那么做 卷积的时候,枚举二进制位 ,把对应的 拿出来跟 进行与运算,左移 位,再与 进行或运算即可。时间复杂度为

提交链接:https://ac.nowcoder.com/acm/contest/view-submission?submissionId=78736158

一位参赛者的做法:

主要思路还是 卷积。但是注意到 ,因此可以这把 组位运算卷积用 打包成一个数,最后做一次 卷积。时间复杂度为

提交链接:https://ac.nowcoder.com/acm/contest/view-submission?submissionId=78730188

类似的处理方法:https://codeforces.com/contest/1034/problem/E