Skip to content

把这些转为markdown源码给我:

运算与进制

逻辑运算(只有01的运算):
	逻辑运算是所有运算的基础,可以实现所有的运算
	逻辑运算的基本运算符:与,非
	逻辑运算的重要运算符:或,异或
	核心性质:所有逻辑运算符都可由核心运算符(与,非)表达
	和其他高级运算的关系:
		逻辑运算可以看作在取模2的意义下的一般整数运算
		拥有一般整数运算的所有性质
		具体的,加/减 对应 异或,乘 对应 与
		
		推广结论:异或的结果的奇偶性和加法结果的奇偶性相同
	
	这是位运算的基础,分析位运算的性质通常都可以通过按位分解转换成逻辑运算的分析
处理位运算的常见办法:
	01trie:分析性质常用
	按位分解:分析性质或计算答案
		此时只需考虑01的贡献,可以利用逻辑运算的性质
	高维前缀和,fwt:允许状压时的常见办法
	线性基:
		1.判断一个数能否被一个集合中的数异或出来
		2.得到整个集合能异或出多少个数
	
	二进制位互相不独立的处理:
		不等号:
			钦定前k位都取等,然后考虑k+1位不取等
			将不取等的情况去掉,然后继续递归
		加减法:
			加法可以看成异或+进位,不同位之间的影响只有进位
			分析进位的条件,一般情况是有大小限制
			分类考虑是否进位,从而实现拆位考虑
			减法分析退位即可,是相似的
			
			具体实现:
				对于第k位考虑时,一种较通用办法是将所有运算都放在模2^(k+1)下考虑,这样容易刻画进位
				否则,需要具体问题具体分析

位运算的常见性质:
	位运算与集合的关系:
		x&y==y || x|y==x -> y是x的子集
		ful^x -> x的补集
	各个位运算的关系:
		!(x&y)=(!x)|(!y)
		利用补集(非),与和或可以互相转化
		
		xor可以被补集 和 与(或)表示出来
		但是,xor不能表示其他任何运算
		
		综上,所有位运算只需要保留 非 与
		这可以用来考虑有多种位运算结合的问题
	位运算和高级运算的关系:
		对应关系-相似性质:
			加/减 对应 异或,乘 对应 与
			证明考虑用逻辑运算性质分析(模2意义下)
			那么 加法 乘法 的运算关系可以完全和 异或 与 等价
			经典的:
				乘法相对于加法的分配律:与相对于异或的分配律
				加乘矩阵的结合律:异或-与矩阵的结合律
		异或和加法的关系:
			异或等价于不进位加法
			加法和异或转换时核心在于分析是否进位
		异或和加减法的不等关系:
			x-y<= x xor y <=x+y
			
			x-y==x xor y 当且仅当y是x的子集
			x+y==x xor y 当且仅当y和x互补
	异或的常见性质:
		自反性,交换律(无序性),可减性
		一个集合的必然存在最小异或点对在值域上相邻
		xor变换性质:
			形象化的讲,是一条双向边,两两配对
			集合{1~(2^k-1)}中的每个元素异或上x(0<=x<2^k)后集合不变

原码和补码:
	定义:
		原码就是有符号二进制数
		补码就是有符号二进制数在模2^k的意义下对应的非负数
			其中,k是根据变量存储类型决定的
	性质:
		x的补码和-x的补码的最低位相同
			因为相加和为0,所以自然相同
		非负数的补码必然最高位是0,负数的补码必然最高位是1
	作用:
		利用补码,我们不用考虑减法和加法的差异,可以一律使用加法考虑问题
		这对于我们上述二进制加减法的分析有所裨益

任意进制下的规律:
	数的表示:
		x=a0*p^0+a1*p^1+a2*p^2+...
		其中,a0,a1,a2,...范围是[0,p-1]
		
		可以发现,这是一个条件更强的多项式
		所以数的运算可以看作由两部分组成:
			多项式运算(加法、卷积)
			保证系数范围限制的进退位
	加减法:
		对应的多项式运算是多项式加法
		
		任何进制下,两个数相加的进位最多是1
		任何进制下,两个数相减的退位最多是1
	乘法:
		对应的多项式运算是卷积
		
		任何进制下,两个数相乘的位数(从1开始)最多x+y
		卷积过后,多项式系数的最大值为 (p-1)^2*(较小的数的位数)
		
		具体实现:复杂度瓶颈在卷积,可以用NTT优化
	除法:
		对应的多项式运算是多项式除法
		实际实现可以模拟竖式除法
			竖式除法正确性可以利用反证法证明
	
	利用以上分析,容易实现朴素的高精度

例题:
	YNOI fusion tree:
		难点在+1,考虑到进位的条件是低位前缀都是1,所以要特别处理这种情况
		显然可以从低向高建trie树,每次处理从上到下递归即可
	自己想的题:
		全局加:a[i]+=x
		插入数
		删除数
		求全局异或和
		
		solution:
			对于每一位分别考虑,将操作置于模意义下
			可以通过记全局tag实现全局加
				那减完tag出现负数怎么办?利用补码考虑即可
			那么查询可以列出范围,然后BIT求解即可
求集合最大按位与(或)点对:高维前缀和
求集合最大异或点对:trie树

联考题:
	给定若干数,每个数形如若干段1和0拼起来的,
	操作可以将集合中的任意两个数做 与,或,异或,或是 取反
	问有多少个2的非负整数次幂能表示出来
	
	solution:
	显然,只有与和非有用
	过程太难分析,直接考虑找必要条件
	不合法的时候,必然有两个点的覆盖的样子一样
	那么显然覆盖样子不同是必要的
	感觉也很有充分性,看看怎么构造
	(有难度)将没有覆盖的取反,然后将所有都取交,易证合法
逻辑运算(只有01的运算):
	逻辑运算是所有运算的基础,可以实现所有的运算
	逻辑运算的基本运算符:与,非
	逻辑运算的重要运算符:或,异或
	核心性质:所有逻辑运算符都可由核心运算符(与,非)表达
	和其他高级运算的关系:
		逻辑运算可以看作在取模2的意义下的一般整数运算
		拥有一般整数运算的所有性质
		具体的,加/减 对应 异或,乘 对应 与
		
		推广结论:异或的结果的奇偶性和加法结果的奇偶性相同
	
	这是位运算的基础,分析位运算的性质通常都可以通过按位分解转换成逻辑运算的分析
处理位运算的常见办法:
	01trie:分析性质常用
	按位分解:分析性质或计算答案
		此时只需考虑01的贡献,可以利用逻辑运算的性质
	高维前缀和,fwt:允许状压时的常见办法
	线性基:
		1.判断一个数能否被一个集合中的数异或出来
		2.得到整个集合能异或出多少个数
	
	二进制位互相不独立的处理:
		不等号:
			钦定前k位都取等,然后考虑k+1位不取等
			将不取等的情况去掉,然后继续递归
		加减法:
			加法可以看成异或+进位,不同位之间的影响只有进位
			分析进位的条件,一般情况是有大小限制
			分类考虑是否进位,从而实现拆位考虑
			减法分析退位即可,是相似的
			
			具体实现:
				对于第k位考虑时,一种较通用办法是将所有运算都放在模2^(k+1)下考虑,这样容易刻画进位
				否则,需要具体问题具体分析

位运算的常见性质:
	位运算与集合的关系:
		x&y==y || x|y==x -> y是x的子集
		ful^x -> x的补集
	各个位运算的关系:
		!(x&y)=(!x)|(!y)
		利用补集(非),与和或可以互相转化
		
		xor可以被补集 和 与(或)表示出来
		但是,xor不能表示其他任何运算
		
		综上,所有位运算只需要保留 非 与
		这可以用来考虑有多种位运算结合的问题
	位运算和高级运算的关系:
		对应关系-相似性质:
			加/减 对应 异或,乘 对应 与
			证明考虑用逻辑运算性质分析(模2意义下)
			那么 加法 乘法 的运算关系可以完全和 异或 与 等价
			经典的:
				乘法相对于加法的分配律:与相对于异或的分配律
				加乘矩阵的结合律:异或-与矩阵的结合律
		异或和加法的关系:
			异或等价于不进位加法
			加法和异或转换时核心在于分析是否进位
		异或和加减法的不等关系:
			x-y<= x xor y <=x+y
			
			x-y==x xor y 当且仅当y是x的子集
			x+y==x xor y 当且仅当y和x互补
	异或的常见性质:
		自反性,交换律(无序性),可减性
		一个集合的必然存在最小异或点对在值域上相邻
		xor变换性质:
			形象化的讲,是一条双向边,两两配对
			集合{1~(2^k-1)}中的每个元素异或上x(0<=x<2^k)后集合不变

原码和补码:
	定义:
		原码就是有符号二进制数
		补码就是有符号二进制数在模2^k的意义下对应的非负数
			其中,k是根据变量存储类型决定的
	性质:
		x的补码和-x的补码的最低位相同
			因为相加和为0,所以自然相同
		非负数的补码必然最高位是0,负数的补码必然最高位是1
	作用:
		利用补码,我们不用考虑减法和加法的差异,可以一律使用加法考虑问题
		这对于我们上述二进制加减法的分析有所裨益

任意进制下的规律:
	数的表示:
		x=a0*p^0+a1*p^1+a2*p^2+...
		其中,a0,a1,a2,...范围是[0,p-1]
		
		可以发现,这是一个条件更强的多项式
		所以数的运算可以看作由两部分组成:
			多项式运算(加法、卷积)
			保证系数范围限制的进退位
	加减法:
		对应的多项式运算是多项式加法
		
		任何进制下,两个数相加的进位最多是1
		任何进制下,两个数相减的退位最多是1
	乘法:
		对应的多项式运算是卷积
		
		任何进制下,两个数相乘的位数(从1开始)最多x+y
		卷积过后,多项式系数的最大值为 (p-1)^2*(较小的数的位数)
		
		具体实现:复杂度瓶颈在卷积,可以用NTT优化
	除法:
		对应的多项式运算是多项式除法
		实际实现可以模拟竖式除法
			竖式除法正确性可以利用反证法证明
	
	利用以上分析,容易实现朴素的高精度

例题:
	YNOI fusion tree:
		难点在+1,考虑到进位的条件是低位前缀都是1,所以要特别处理这种情况
		显然可以从低向高建trie树,每次处理从上到下递归即可
	自己想的题:
		全局加:a[i]+=x
		插入数
		删除数
		求全局异或和
		
		solution:
			对于每一位分别考虑,将操作置于模意义下
			可以通过记全局tag实现全局加
				那减完tag出现负数怎么办?利用补码考虑即可
			那么查询可以列出范围,然后BIT求解即可
求集合最大按位与(或)点对:高维前缀和
求集合最大异或点对:trie树

联考题:
	给定若干数,每个数形如若干段1和0拼起来的,
	操作可以将集合中的任意两个数做 与,或,异或,或是 取反
	问有多少个2的非负整数次幂能表示出来
	
	solution:
	显然,只有与和非有用
	过程太难分析,直接考虑找必要条件
	不合法的时候,必然有两个点的覆盖的样子一样
	那么显然覆盖样子不同是必要的
	感觉也很有充分性,看看怎么构造
	(有难度)将没有覆盖的取反,然后将所有都取交,易证合法

Released under the MIT License.