把这些转为markdown源码给我:
数学杂项
取整函数相关
和c++语言的关系:
floor 下取整
ceil 上取整
整数之间除法 向0取整
定义(性质):
floor(x)=x-r,0<=r<1
ceil(x)=x+r,0<=r<1
推论:
floor(x/y) 不同的r的数量恰y个
上取整和下取整的转换:
ceil(x/y)=floor((x-1)/y)+1
在c++中实现时,如果用整数除法,一定要考虑正负性和0
连除的合并:
floor(floor(x/y)/z)=floor(x/(y*z))
加法进出取整函数:
floor(x/y)+z=floor( (x+y*z)/y)
特别注意,乘法不能进出取整函数
取整函数不等式的处理:
floor(x/y)>=z -> x>=y*z
ceil(x/y)<=z -> x<=y*z
其他形式的不等式通过变换转换成上述两种处理
数论分块
核心结论1:
若floor(n/i)=k,则max{i}=floor(n/k)
即:floor(n/i)=k -> floor(n/k)>=i
核心结论2:
floor(n/i)的不同的取值最多O(sqrt(n))个
一维数论分块及高维数论分块
带取整的函数最值:
常见处理办法:
整除分块(数量等于被除数的根号)
暴力枚举余数(数量等于除数大小)
题:
abc374_e Sensor Optimization Dilemma 2
斐波纳契数列:
此处的定义:f[0]=f[1]=1,f[n]=f[n-1]+f[n-2]
组合意义:f[n+1]表示满足两两1不相邻的长为n的01串个数
常见恒等式:
合成与分解:f[n]=f[m]*f[n-m]+f[m-1]*f[n-m-1]
前缀和:sum[n]=f[n+2]-1
前缀平方和:sum_2[n]=f[n]*f[n+1]
和数论的结合:
f[n]和f[n-1]互质
gcd(f[n],f[m])=f[gcd(n,m)]
组合意义扩展:
f[n+1]=C(n+1,0)+C(n,1)+C(n-1,2)+...
其中,组合数C(n+1-i,i)的含义是将i个点放进n个位置且两两不相邻的方案数
即 杨辉三角对角和
例题:
CF316E3
取整函数相关
和c++语言的关系:
floor 下取整
ceil 上取整
整数之间除法 向0取整
定义(性质):
floor(x)=x-r,0<=r<1
ceil(x)=x+r,0<=r<1
推论:
floor(x/y) 不同的r的数量恰y个
上取整和下取整的转换:
ceil(x/y)=floor((x-1)/y)+1
在c++中实现时,如果用整数除法,一定要考虑正负性和0
连除的合并:
floor(floor(x/y)/z)=floor(x/(y*z))
加法进出取整函数:
floor(x/y)+z=floor( (x+y*z)/y)
特别注意,乘法不能进出取整函数
取整函数不等式的处理:
floor(x/y)>=z -> x>=y*z
ceil(x/y)<=z -> x<=y*z
其他形式的不等式通过变换转换成上述两种处理
数论分块
核心结论1:
若floor(n/i)=k,则max{i}=floor(n/k)
即:floor(n/i)=k -> floor(n/k)>=i
核心结论2:
floor(n/i)的不同的取值最多O(sqrt(n))个
一维数论分块及高维数论分块
带取整的函数最值:
常见处理办法:
整除分块(数量等于被除数的根号)
暴力枚举余数(数量等于除数大小)
题:
abc374_e Sensor Optimization Dilemma 2
斐波纳契数列:
此处的定义:f[0]=f[1]=1,f[n]=f[n-1]+f[n-2]
组合意义:f[n+1]表示满足两两1不相邻的长为n的01串个数
常见恒等式:
合成与分解:f[n]=f[m]*f[n-m]+f[m-1]*f[n-m-1]
前缀和:sum[n]=f[n+2]-1
前缀平方和:sum_2[n]=f[n]*f[n+1]
和数论的结合:
f[n]和f[n-1]互质
gcd(f[n],f[m])=f[gcd(n,m)]
组合意义扩展:
f[n+1]=C(n+1,0)+C(n,1)+C(n-1,2)+...
其中,组合数C(n+1-i,i)的含义是将i个点放进n个位置且两两不相邻的方案数
即 杨辉三角对角和
例题:
CF316E3