[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位,与原串的大小关系

差分得出答案

 

posted @ 2018-04-12 15:10  尹吴潇  阅读(137)  评论(0编辑  收藏  举报