计算机为什么用二进制?
因为二进制简单。每个位置只有0/1两种情况。
并且任何数都可以表示成二进制。
0/1代表开/关,选/不选都有优势。
例题:
1.
Single Number
■ 有一个数组,里面的元素每个都出现了两次,除了一个特殊的,求这个特殊元素。
直接异或
Single Number II
■ 还是一个数组,每个元素出现两次,只有两个特殊的元素出现一次,把这两个特
殊的元素找出来。
两个元素不同,至少一位不同。
所有的数异或起来得到a^b,任取为1的一位作为分解线,ab有一个这一位是1,另一个是0.然后把这一位是1的放一组,是0的放一组。
这样a,b一定分开了。然后分别异或可得。
2.BZOJ 4300 绝世好题
■ 给定一个长度为n的数列ai,求ai的子序列bi的最长长度,
■ 满足bi&bi-1!=0(2<=i<=len)。
■ n<=100000,ai<=2*10^9
类似最长上升子序列统计。由于和前一位至少一位都有1,枚举是1的那一位,然后前缀max即可。
BZOJ 3687: 简单题
■ 小呆开始研究集合论了,他提出了关于一个数集四个问题:
1.子集的异或和的算术和。
2.子集的异或和的异或和。
3.子集的算术和的算术和。
4.子集的算术和的异或和。
目前为止,小呆已经解决了前三个问题,还剩下最后一个问题还没有解决,他决
定把这个问题交给你,未来的集训队队员来实现。
■ ai >0,1 < n < 1000,∑ai≤2000000。
之间算不好算。发现,异或满足交换律,所以,如果一个算数和出现了2次,那么贡献就是0了。
所以,bitset<2000000>f,计算算数和为f[i]的次数的奇偶性。
对于x,f^=(f<<x)即可。初始f[0]=1;
其实就是bitset优化背包。。。。
bzoj 4713: 迷失的字符串
树形dp。f[i][j]表示,以i为根子树,从前到后匹配到第j位是否可行。