一个比官方题解好理解得多的做法!!!
需要一定线性代数/生成函数基础。
问题其实就是给定线性空间
R,B 求
dim(R+B)(注意这里是和而非并)。使用线性代数维数公式,得
dim(R+B)=dim(R)+dim(B)−dim(R∩B)。
Proof
设
dim(R)=n,dim(B)=m,dim(R∩B)=k。取
R∩B 的一组基
α1∼k,分别扩展成
R/B 的基为
α1∼k,β1∼n−k 和
α1∼k,γ1∼m−k。
问题即为,说明
α1∼k,β1∼n−k,γ1∼m−k 这些向量线性无关。反证,若:
∑xiαi+∑yiβi+∑ziγi=0,设
δ=∑xiαi+∑yiβi=∑−ziγi。则
δ∈R 且
δ∈B,故
δ∈R∩B,从而存在
w1∼k 使得
δ=∑wiαi。 故而
∑wiαi+∑ziγi=0,由于
α1∼k,γ1∼m−k 线性无关所以
wi,zi 全为
0,所以
δ=0。从而
xi,yi 也全为
0,结论得证。
其中
dim(R) 显然是
(n−a+1)(m−b+1),
dim(B) 同理。难点在于如何算
dim(R∩B)。不妨先就一维的问题进行讨论,将问题使用在
F2 意义下的生成函数刻画(这一手法在
CF1698G 中也可见得):令
Fa(x)=0≤i<a∑xi,
Fc(x) 同理。向量
v∈R 当且仅当有
P(x)(degP≤n−a) 满足
v(x)=P(x)Fa(x);向量
v∈B 当且仅当有
Q(x)(degQ≤n−c) 满足
v(x)=Q(x)Fc(x)。
若
v∈R∩B 则有
P(x)Fa(x)=Q(x)Fc(x),此处必须有
P(x)Fa(x) 是
Fc(x) 的倍数,即
P(x) 是
gcd(Fa(x),Fc(x))Fc(x) 的倍数。
gcd(Fa(x),Fc(x)) 是什么?更损相减一下,就是
gcd(xc⋅Fa−c(x),Fc(x))(a>c)=gcd(Fa−c(x),Fc(x)),从而
gcd(Fa(x),Fc(x))=Fgcd(a,c)(x)。
若
P(x)=G(x)gcd(Fa(x),Fc(x))Fc(x),则
G(x) 仅需
degG≤n−a−c+gcd(a,c)(另一边
degQ≤n−c 的限制推出来是一样的),任意的
G(x) 都可决定
v,而
degG 可取遍
0∼n−a−c+gcd(a,c),故
dim(R∩B) 即为该值
+1。
对于二维的问题,可以直接列二维生成函数,你会发现运算过程中两维是完全对立的,换句话说,
dim(B∩R) 就是
(n−a−c+gcd(a,c)+1)(m−b−d+gcd(b,d)+1)
当然得特判减成
<0 的情况。复杂度瓶颈在于快速幂/求
gcd 为
O(TlogV)。