验题人/参赛者题解 | F Broken LED Lights
验题人(我)的做法:
对灯管进行状压后,枚举每两个数,状态相同的灯管集合。
设第 盏灯和第
盏灯的状态相同的灯管集合为
,那么答案(即保留的灯管集合)不能为任意
的子集,这启发我们考虑对
做
卷积(即高维后缀和)。时间复杂度为
,不能通过。
对于 的每个元素,我们只关心它是否为
。这启发我们使用
去优化。对于每个二进制位
,使用一个
去记录位运算卷积的系数。具体地,对于每个状态
,如果它的第
位为
,就把第
个
的
位设置为
。那么做
卷积的时候,枚举二进制位
,把对应的
拿出来跟
进行与运算,左移
位,再与
进行或运算即可。时间复杂度为
。
提交链接:https://ac.nowcoder.com/acm/contest/view-submission?submissionId=78736158
一位参赛者的做法:
主要思路还是 卷积。但是注意到
,因此可以这把
组位运算卷积用
打包成一个数,最后做一次
卷积。时间复杂度为
。
提交链接:https://ac.nowcoder.com/acm/contest/view-submission?submissionId=78730188