退役后的颓废记录(No Password)

T2多测没清空,爆零了。

没什么好说的,也不知道有没有机会了。

趁着最后半天whk半天竞赛的日子再做些题吧。

ARC110E

挺神的一道dp题。

这么考虑:如果一段串可以拍成一个字母,那么其实这个字母是唯一确定的。

再进一步:可以吧$ABC$每个字母都看成二进制,两个数结合就是异或。把$ABC$分别赋值为$1,2,3$,发现如果一段的异或和不为0,那么它一定能缩成一个字母,反之则不能缩成(如果这一段前面有字母的话,可以把这一段全部干掉)。

那么我们设$dp[i]$表示当前以$i$结尾的方案数,思考如何转移。

转移的时候可以枚举后面那段哪些拍成哪个字母,因为统计方案会重复(考虑相同类型的两个位,它们之间的异或和是0,可以全部干掉,会重复统计),所以只更新最短的可以形成各个字母的位。(其实就是每种字母每种出现次数只更新一次)

在统计答案时,因为保证了$dp[i]$的第$i$为一定是作为最后一位存在的,而事实上$n$不一定存在,它可以被所有异或和为0的串干掉,所以要把所有后缀异或和为0的前一位全部统计。

注意字母全部相同的Corner Case。

原文地址:https://www.cnblogs.com/Forever-666/p/14100091.html