[HNOI2012]与非
题解:
由于之前没有对位运算之间的关系仔细研究过,今天仔细推了一波
首先 我们可以利用not和and推出所有位运算
A or B =not (notA and notB)
A xor B= ~((notA and notB)or (A&B))
而本题中定义的nand
我们会发现 x nand x=~x
而~x nand ~y=x and y
所以 换而言之,nand所向披靡的推出了所有位运算符
那么考虑接下来的这件事情
给定一些数,可以用not,or,and,xor 能组成多少数
考虑这么一件事情,如果x的第i位和第j位不一样
那么答案中第i位和第j位就互不相关了
举个例子,不妨设x的第i位为1,第j位位0
匹配到一个y 第i位为1,第j位为0
那么xor一下 0 0
or一下1 0
xor再取反一下 1 1
都取反再or一下 0 1
同理可以发现所有都能匹配出所有情况
然后这么yy一下能发现
对于二元组(i,j)
除非所有串中xi,xj都一样 否则最终xi xj无关
这我感觉并不好证明
然后就变成了基础的数位dp
F[i][0/1]表示匹配到第i位,与原串的大小关系
差分得出答案