8月记录

237.Hitori的字符串(string)

AC 自动机上随机游走问题,但是叶子 100 个,有环。

考虑设元然后高斯消元,但对每个点设显然不优,考虑一种链剖分,对链顶设元。

然后按照 bfs 序(trie 树上的)维护每个点期望的表示(用元表示)。

1722513057963

如果 trx,i 是返祖边,显然深度比 x 小,一定被表示了。

否则一定是链顶,可以被表示。

或者将度数 >1 的点设为关键点也能做,没细想。

238.Hitori玩游戏(nim)

考虑随机化,将一种方案的权值记为线性基中自由元个数。

每次取出一个集合,删掉选的数,选一个新的数,如果权值减小了,就替换当前方案,如果相等,就以一定概率替换。

将集合元素按照 1 的个数多少排序,shuffle 一下选择集合顺序即可。

239.Hitori摘樱桃(cherry)

根据小凯的疑惑,只有两个数 x,y,满足 (x,y)=1,那么 xyxy 是最大的不能被表示的数。

证明可以考虑同余最短路,在模 x 的意义下 i(i+y)modx,求出 fi 表示 modx=i 的最小能表示的数,将 fixmax 即可。

考虑这个图,就是一个环,可以手动模拟求出。

多个数也是一样的,求出所有数的 gcd,记 x=gcda,y=gcdb,那么 (a,b)=1,在 gcdagcdb=xy 之后,所有数(gcd 的倍数)都能被表示。

对于 V 的数暴力背包,>V 的数每个 gcd 的倍数都能被表示,我们相当于要求 (px+100p)nmodxm

倍增 NTT 即可维护,每次缩减长度。

注意,可以计算所有数到离他最近的 gcd 的距离,即后面这一部分,然后在前面背包的部分在加上每个数离他最近的 gcd 到离他最近的可以取到的数的距离。

240.Min-25筛

复习一下。

条件是质数位置和质数次方答案可以快速算。

先考虑求 G(m)=i=1m[iprime]f(i),其中 m{n1,n2,...,nn}

g(j,m)=i=1m[iprimeorminp(i)>p[j]]f(i),其中 f(i) 在质数处取值与 f 相同,然后是完全积性函数,可以快速求前缀和。

边界是 g(0,m)=i=2f(i),如果质数取值是一个简单多项式,对每一项分别求即可。

  • pj2>m,则 g(j,m)=g(j1,m),因为没有最小质因子 >m 的合数。

  • 否则,下面式子表示减去最小质因子为 pj 的数的函数和:

    • g(j,m)=g(j1,m)f(p[j])×(g(j1,mp[j])i=1j1f(p[i]))(p[j]2m)

我们可以对每一个 m,维护值,将第一位滚掉。

这一部分是如下复杂度。
image

考虑用 G(m)=i=1m[iprime]f(i) 求出所有 f 的和。

S(n,j)=i=1n[minp(i)p[j]]f(i),答案为 f(1)+S(n,1)

则:

S(n,j)=G(n)i=1j1f(p[i])+i=jp[i]2ne=1p[i]e+1n(f(p[i]e)S(np[i]e,i+1)+f(p[i]e+1))

左边是质数的贡献,右边是合数的,枚举合数的最小质因子还有次数,直接递归,不用记忆化。

image

241.士兵游戏(soldier)

考虑每条边的贡献,答案为 nszi(szi)2

对于 >n 的质数 x,子树大小为 nx,需要求区间质数个数,min25 即可。

对于 sqrtn 的质数 x,有:

x=1xprimeny=1nx[maxf(y)x]z=1nxy[minf(z)x]

可以整除分块维护,中间两部分相当于特殊的 min25 其中一部分,可以做到 O(n34lnn)

242.无理数乘法

image

这么 nb

发现 (1+3)n+(13)n 是整数,并且 (13)n 是一个在 (1,1) 且不为 0 的小数,所以求出 f(n),判断奇偶,就能知道 (1+3)n 了,并且 a,b 可以递推,矩阵优化。

243.#D. 整型与布尔型的转换

image

有启发性的题。

做一遍标记的复合。

244.CF1982

E

fl,r,k 表示区间 [l,r] 的答案。

则答案最高位拆分,假设是 2t,则 \(f_{0,n-1,k}=f_{0,2^t-1,k)+f_{0,n-2^t-1,k-1}\)

左端点都是 0,可以预处理出 f0,2t1,k 的所有取值,求任意 n 时单侧递归即可。

F

考虑找到极长合法前缀,左端点肯定在这里面,找到后缀的 min,找到前缀中最前的 >min 的就是左端点了,后缀同理。

线段树上二分即可。

245.CF1993

有jb

D

挺好想的,二分中位数,dp 一下,记前缀取了 j 段,当前点是右端点的答案,发现前缀可能段数是 O(1)

E

考虑到扩展矩阵到第 n+1 行,第 m+1 列,操作就变成了交换第 i 行与第 n+1 行和交换第 j 列与第 n+1 列。

其实也等价于任意交换两行或两列。

发现找到行的排列和列的排列,每次操作相当于交换行排列任意两个数,列同理。

然后发现知道行排列和列排列就能知道原矩阵了,因为交换的顺序不会影响最后矩阵的排布,一定是 bri,ljai,j

并且知道了行排列就能知道相邻行的差了,不管列排列是什么,列同理。

于是状压一下,记录当前选了哪些点,以及最后选的点是什么,后面加上一个点。

若我们枚举删除了哪个行,然后在剩下的行中计算列排列的贡献,删除列的情况可以在状态中体现,列同理。

时间复杂度 O(n32n)

F2

F1 就是先将矩形镜面对称一下,就变成循环矩阵了,将路径在循环矩阵上跑一跑,固定起点,可以快速计算 (0,0) 有多少个点。

考虑 F2,可以将满足条件的点 (xj,yj) 写成关于次数 i 和起点 xn,yn 的两个同余方程,解出关于 i 的通解来,合并一下即可。

Hitori的旅行(journey)

考虑用多项式描述背包,记 Fu(x)=j=1wcntjxj

则点 u 答案为:

Fu3(x)3Fu(x2)Fu(x)+2Fu(x3)6

前一项表示三条路径任选,中间项表示钦定两条相等,即算出至少一对相等的方案数,系数是 3

然后至少两对相等的方案数是 +3Fu(x3),最后至少三对相等的方案数是 1Fu(x3)

只是从容斥的角度考虑,至少两对相等就等于至少三对相等,但是要合并系数。

然后现在题目变成了,逆拓扑序处理 Fu,在每个点 u 做个卷积,将各项系数求和,做卷积的复杂度太高。

x=13w+1 这几个值带入,卷积就是 O(1) 的了,可以求出 x=13w+1 时,答案多项式的值。

将他插回来就行了。

f(x)=i=13w+1yijixxjxixj

246.hdu 2024“钉耙编程”中国大学生算法设计超级联赛(6)

A. 造花(简单版)

删去的点度数一定是 2,且合法的图中满足度数是 1 的点有很多,度数为 2 的点极少,对这些点判断即可。

B. 造花(困难版)

考虑一条边 (u,v),存在 xux,u 相连,且存在 yvv,y 相连(x 可以等于 y),则一定要在这里删一个。

否则就是三元环或者长度为 3 的链。

若没有,那么原图无环,且最长链 2,一定合法。

E. 交通管控

fi,j 表示使用前 i 个操作,红绿灯的状态,容易转移。

G. 树上 MEX 问题

考虑计算 mexi 的方案数。

找到必须包含的关键点 j[1,i1] 构成的虚树,如果 i 在虚树上,则 ansi=ansi1

否则,将 i 加入虚树(不断跳父亲),计算贡献,考虑 mexi 的联通块数量就是所有 v,满足 v 与虚树有连边且 v 不在虚树上的 (fv+1) 的乘积,fv 表示 v 子树包含 v 的联通块数量,容易预处理。

H. 树形 DNA

看作一个字符集为 2trie,可以将 T 分解为 20 个字符串构成的 trie,字符串集合为 Ts

fau,k 表示 uk 级祖先。

假设当前在 Strie 上的节点 v,若存在 sTs,满足 sv 到根的字符串的后缀,则 cntfau,|S|cntfau,|S|+1,若存在 cntu=k,就是合法点,可以哈希。

I. 数字加减

可以看懂,根本无法写。

相当于每个时刻值域上有一些线段,每过一个时刻,线段往左右扩张 1 格,会合并,限制相当于删除。

颜色段均摊,每个线段维护中心点和半径可以简化。

J.Rikka 与子集 IV

类似题:[ABC269Ex] Antichain

合并是类似多项式卷积的形式,考虑描述,Fu=(vFv)x+1

每个多项式大小跟子树大小有关,考虑将重儿子和轻儿子分开计算。

Gu=vsuFvFu=GuFsux+1

Gu 可以考虑分治 NTT 维护乘积,轻子树大小总和是 O(nlogn) 的,一个轻子树跟父亲合并,要分治 logn 层,每层 logn 的复杂度,所以是 O(nlog3n) 的。

对于 Fu,考虑一条重链一起算。

F1=G1F2x+1=G1(G2F3x+1)x+1=G1(G2(G3F4x+1)x+1)x+1

展开后发现只需要维护前缀乘积的和,依旧是分治 ntt,每个多项式依旧是轻子树大小。

这样能做类似题,但是这题需要求出重链上所有 Fu 的系数和。

考虑即为区间乘积的和,也可以分治 ntt 维护。

就做完了,时间复杂度 O(nlog3n)

K. 天天爱跑步

给一棵基环树,对每个点 i,求过 i 的最长简单路径。

数据范围:n105

容易口胡。

247.P10560 [ICPC2024 Xi'an I] Holes and Balls

类似题、弱化题:P4364 [九省联考 2018] IIIDX

考虑按位贪心,找到当前位最小能填的数,满足能填下,就填。

一个位置要填编号为 k 的球,有什么条件:

  • k 没被选;

  • k 大于父亲球的编号

  • 编号 [1,k1] 的球能全部塞进 u 的子树外。

考虑条件二,相当于钦定 k 的下界,条件三就是钦定 k 的上界。

考虑找到上界,记 limj 表示 jj 的祖先已填球的编号的最大值,sumi=j=1n[jsubtree(u)][limji]

贪心,考虑将 u 子树外的点按照 (limj,depj) 排序,将 [1,k1] 填入,此时已经确定的点一定能填入自己的数。

若贪心过程不合法,一定存在一个 ik,sumi<i,则维护 sumi,二分找到满足 iz,sumii 的最大 z 就是上界了。

找答案就是在区间中找未被选的最大权值数,关于 sum 的修改,一个全未选子树的 lim 的相同的,容易维护。

维护两棵线段树做到 O(nlogn)

248.CF1989

E

用段数来映射 b 数组,q,q1,q2,1,1,2,3,,x1,x,x1,,1,1,2,p

然后开头结尾可以有长度为 2 的段,中间不行,会和两个 1 重复,dp 即可。

F

hot!

类似题:P5163 WD与地图

问题相当于每个时刻加一条有向边,求当前时刻强联通分量大小平方的和。

考虑分治维护,求出中间时刻的强联通分量,即 mid 时刻前的边,如条边两端点在同一个强联通分量内,将他插入左边子区间,其他边插入右边子区间,表示这些边不可能在 [l,mid] 时两端点在同一个强联通分量内。

分治到了叶子,每个点存的边就是会改变强联通分量的边,用并查集维护联通块大小平方的和即可。

注意当前处理区间 [l,r] 的边,需要将边的两端点改为联通块的关键点,即 [1,l1] 处理完后的联通块,因为每次要考虑联通块的合并,不是真实点的合并,不然复杂度就不对了。

249.P10766 「CROI · R2」01-string

想贪心糖丸了。。。

一定是先进行覆盖操作再进行翻转操作,且覆盖操作不会执行两次。

fu,i,j,k 表示 [u,n] 是否执行 1,2,3 操作的最小答案。

记忆化即可。

253.尼伯龙根的思维题(subway)

因为 k 非常大,大于 max(ai,aj)×n,则我一定可以构造出使得权值加上任意偶数的方案。

现在判断 1n 有无奇数和偶数路径即可。

  • 在什么条件下,uu 有长为 k 的路径?(k 充分大)

    • k 充分大时有解当且仅当 gcd{leni}|k,其中 {leni}u 所在强连通分量的环长集合。
  • 在什么条件下,uv 有长为 k 的路径?(k 充分大)

    • 在模 g 意义下,若 uv 存在长为 x 的路径,则 vu 存在长为 x 的路径。
    • 在模 g 意义下,任意一条 uv 的路径长度均相等。
    • 在模 g 意义下,uv 的路径长度为 depvdepu
    • k 充分大时有解当且仅当 g|kdis(u,v),其中 dis(u,v)uv 任一条路径的长度,其余定义如上。
  • k 充分大的条件是?

    • image

    • image

  • 如何求出 g

    • image

254.公司(company)

待补。

image

警告:不要跟自己的半暴力程序拍!

263.交换余生(change)

可以分治,预处理左右区间第 k 大和第 k+1 大,发现能合并的条件就是有区间交。

然后就是做个区间取 max,最后再区间求 max,发现区间左右端点单增,做两个单调栈即可,常数巨大,时间复杂度 O(nklognk)

正解是,考虑枚举区间第 k 大的取值,将 <v 的设为 0>v 的设为 1,那么一个区间包含连续 k1,那么 v 一定在他的第 k 大和第 k+1 大之间。

从大到小添加数,每连续 k1 会有贡献,若增量维护,只有 O(k) 个区间的贡献改变,时间复杂度 O(nk)

264.水管工(tank)

太神了这题。

发现若记录每个点是否连向四个方向,那么高级水管的放置需要满足左右不相等,上下不相等,这样总有一个方向可以满足,发现行列是不会影响的,这些限制可以分开做。

考虑没有 ox 的情况,对于一个行,有 0????0,那么中间所有填上高级水管是合法的,如果是 0????1,那么中间可以做到至多一个低级水管,其他都是高级水管,条件等价于一个区间需要选择一个位置填低级水管,称为二类限制。

发现如果二类限制的行列有交,在交的位置填一个低级水管,可以同时满足两个限制,显然更优。

将有交的二类限制行列连边,问题等价于求最大匹配。

考虑有 o 的情况,那么二类限制的条件变为一个区间需要选择一个不为 o 的位置填低级水管。

再考虑有 x 的情况,发现另一个人可以选择任意水管(包括高级水管,但不计入答案)填入,那么这相当于一种四个方向都可以任意填 0/1 的方格,记为 2,在处理到区间边界包含 2 时,就没有限制了。

复杂度是网络流的复杂度。

265.zkw线段树

for(m = 1; m < n + 2; m <<= 1, dep++);

F(i, 0, m + n + 1) tr[i].sum = tr[i].len = tr[i].tg2 = 0, tr[i].tg1 = 1;

F(i, 1, n) tr[m + i].sum = a[i], tr[m + i].len = 1;

dF(i, (m + n) >> 1, 1) up(i);

void upd1(int l, int r, int v) {
	l = m + l - 1, r = m + r + 1;
	dF(i, dep, 1) pd(l >> i), pd(r >> i);
	while(l ^ r ^ 1) { // 互为兄弟节点
		if(~l & 1) ptg_mul(l ^ 1, v);
		if(r & 1) ptg_mul(r ^ 1, v);
		l >>= 1, r >>= 1;
		up(l), up(r);
	}
	for(l >>= 1; l; l >>= 1) up(l);
}

266.最短路(dis)

很妙的题,考虑所有最短路 1 的情况。

如果有 wu,v=wu,k+wk,v 那么一定有一条路径 ukv 可以达到最短路,于是 (u,v) 这条边就不是必要的了,于是 gu,v 只需要 wu,v 就好了。

如果有 wu,v=0 的话就会失效,因为这是条重边,会出现互相支配的情况。

考虑将 wu,v=0 的缩起来,算上内部方案数,这样任意两个联通块变成了之间有若干条相等的重边,变为最短路 1 的情况,对重边随便计算一下即可。

条件三就容斥一下。

考虑内部方案数,相当于一个完全图,边在 [0,m],要求 0 边联通所有点,设 fn 为满足条件的图,gn 为不满足条件的图,有:

fn+gn=(m+1)n(n1)2=hngn=j=1nfjhnjmj(nj)

算一下就好了,时间复杂度 O(n3)

267.火烧云(qwq)

发现结论:任意时刻最多有 O(n) 个连续段。

image

很好理解的,还有一种理性的方法:

  • 考虑设 ck 为长度 k 的连续段个数,我们可以证明 ckk,最优情况下肯定长度越小越好,而钦定了长度比较小的个数,于是连续段始终只有 O(n) 段。
  • 后面再补。

考虑时刻连续段个数都只有 O(n) 段,于是时刻没火变成有火的点总共只有 O(qn) 段,所以有火变成没火的点总共只有 O(qn) 段。

于是只需要支持:

q\sqrtn 次单点激活
q\sqrtn 次单点取消激活,并赋值为0
q 次区间对激活的点求和
q 次区间对激活的点进行加法

分块维护即可。

268.童话镇(lab)

如果确定了起点和终点,等价于 dag 上最多不相交路径条数。

网络流可以做,但是考虑 LGV 引理。

计数转判定,随机选取边权,计算路径权值和,得到矩阵 M,则有解的条件是 detM0,其实等价于 M 是满秩的。

但是这题终点集合是不确定的,但是总的终点集合是确定的。

[l,r] 的极大组大小为 i 等价于 M1i,lr 的秩为 i

那么 [l,r] 的极大组大小就是 M1k,lr 的秩。

考虑扫描线,维护时间戳广义线性基(类似于矩阵乘法),每一行维护一个向量。

最后根据线性基中元素的时间戳就能确定右端点为 r 的区间的 k 段区间的秩的取值了。

269.2024牛客暑期多校训练营5

G

有结论:ans=n!szv,其中 v 是所有实链的链顶,其中定义 (fau,u) 为虚边的 u 是链顶,其中 1 也是。

发现条件等价于对于点 uu 的实子树的最晚点要先于所以虚子树的最短点,其实就是实子树的最晚点是子树内的最晚点。

考虑 dp,设 fu 表示 u 子树内的答案,则有:

fu=fv(szu2)!(szv)!(szhs1)!(szu1)ans=n!szhsszu=n!szv

第二条,考虑一条重链互相抵消了。

其实也可以发现实链上最下面的点就是最晚点,除了最下面的点链上的其他店顺序任意,则条件也等价于只要实链之间有类似树的拓扑序关系,将实链缩成一个点,也是这个结论。

然后维护实链剖分即可,进行树剖,在每条重链上维护虚链集合,每次找到进行更改,更改次数是 O(nlogn) 的,每次 O(logn),所以是两个 log 的。

证明考虑 lct 的实链剖分 access 的证明:

W 为当前重虚边个数。

  • 如果当前修改的是轻虚边,那么不超过 log 条,然后至多会使 WW+logn

  • 如果当前修改的是重虚边,那么会使 WW1

根据势能分析,可以证明。

所以直接维护就是对的。

270.2024“钉耙编程”中国大学生算法设计超级联赛(8)

A

271.概率生成函数学习

272.数据结构专题(xtq 和某些杂题)

273.花花的凸优化技巧和某些杂题

274.广义串并联图

非常启发。

275.TB5分治

276.QOJ4513 Slide Parade

考虑找到一条路径,正着走然后反着走就是环了。

考虑有解的情况,每个点的度数都是 k,将路径取出,就是有重边的 k

正则二分图,一定存在完美匹配,并且可以拆成 k 个完美匹配,说明欧拉路径的构造一定可以。

也就是说如果没有完美匹配就无解,于是问题可以说是每个点流量为某个 k​,跑个匹配,使得每条边都选择至少一次。

可以跑个流,流量越大越好,每条边第一次选代价很大,后面选代价小,很大概率是能跑出解的。

引理:k 正则二分图包含每条边的完美匹配都存在,可以用 hall 证明。

求出包含每个边的完美匹配即可做到 nm​ 的构造。

考虑在残量网络上构造,对于非匹配边,在生成树上找一条路径进行增广即可完成替换,时间复杂度 O(nm)

也可以匈牙利玄学换边。

nd2×106 的正则二分图匹配:

image

其实直接按照一般图最大匹配进行随机化就行了。

277.QOJ5017 相等树链

对第一棵树进行点分治,设点分治的根是 rt

将第一棵树上的链分为 (u,rt),(rt,v),找到两条链在第二棵树上的两个链头(一定得是条链)。

然后进行异或哈希,根据第二棵树上的链的实际两个链头(一定在 4 个链头之中)所在的集合((u,rt) 还是 (v,rt)),得出判断条件。

然后去掉不合法的情况。

image

还有一种哈希方法,得到第一棵树链上的点集合去掉 u,v,rt 得到 S1,将链上点在第二棵树上的父亲得到的点集合去掉 fart,rt 得到 S2,则 S1=S2

另外还需附加条件,就是 faw=rt 的点个数等于 S1 去除的点个数,且 2​。

巨大细节题。

278.CF2003

D2

每个序列有用的只有第一个和第二个 mex,记为 (ai,bi)

前者向后者连边,形成 DAG,如果某个点出度为 1,只有初始值为它时才能用后面的值,如果出度 >1,后面的值始终可用,很好做了。

E2

考虑枚举前半序列的 max 和后半序列的 min 的分界点,转化成 01 序列,合法就得要求每个区间至少存在一个 0 和一个 1,且是 00001111 排布。

显然 01 都从大到小排布最优,逆序对数就是 C(a0,2)+C(a1,2)+(10)

考虑对 01 序列进行 dp,记 fi,j 为考虑 [1,i],有 j1

如果 i 是区间的左端点,就枚举区间内部 0 个数,转移到右端点。

否则正常转移即可。

如果区间有交,找到并集的连通块,每个块求交集,删去除了交集以外的区间(并钦定这些区间必须是 0/1),然后区间就不交了。

F

考虑随机染色,正常 dp,记 fi,s,j 表示考虑 [1,i] 的数,使用了集合 s 的颜色,上一个数是 j

279.P4482 [BJWC2018] Border 的四种求法 / UOJ752Border 的第五种求法

border 理论的持续学习。

Weak Periodicity Lemma:若 pqs 的周期,且 p+q|s|,则 gcd(p,q) 也是 s 的周期。

Periodicity Lemma:若 pqs 的周期,且 p+qgcd(p,q)|s|,则 gcd(p,q) 也是 s 的周期。

borderborderborder

引理:字符串 u,v 满足 2|u||v|,则 uv 中的所有匹配位置组成等差序列,公差为 u 的最小周期。

证明:考虑匹配次数 >2 的情况,2|u||v| 说明两次匹配位置必定有交,而两次位置之差必定为 u 的一个周期。

考虑第一次第二次和最后一次匹配,根据 Weak Periodicity Lemma,两个差的 gcdu 的周期。

不会,、、下次再写吧。

考虑 dag 链剖分,记 fu,gu 分别表示以 u 开头和以 u 结尾的路径个数。

对于 uv,满足 vu 的绝对重后继以及 uv 的绝对重前驱,则为实边。

dag 剖分为若干条链,满足每条路径经过的链数是 log 的。

对于定位 s[l,r],在一条重链上,找到链底的一个位置,跳到当前点的一个位置,与已匹配位置求个最长公共前缀就能知道链上下一个位置了。

border 就可以转化为 parent 树上一条根往下的路径与 dag 上一条路径的交了。

拆成 log 个连续区间,在 parent 树上 dfs,就很容易计算了。

280.基本子串结构(没学完)

ext(t) 为子串 t 的最长扩展串满足 occ(ext(t))=occ(t),存在且唯一。

ext 相等的串视为一个等价类,满足 ext(t)=t 的串视为该等价类的代表院,每个等价类形成一个阶梯形。

l 为横坐标,r 为纵坐标。

image

image

281.CF2007/CF2006

C

显然到无穷大的时候,这些数都可以在 modgcd(a,b) 意义下。

答案就是排序后相邻差的最小值。

D

显然合法只跟根节点和叶子节点有关。

对于叶子节点,一个人获得 lst2,另一个人获得 lst2

如果根节点已经填了,两个人的最优策略显然是不断填上叶子节点。

否则,如果 01 个数不同,先手可以选择填上根节点,获得 lst2

否则,如果先手填上根节点,他可以获得 c+lst2

如果他不选择填上根节点,他可以在非根非叶子节点处消耗步数,此时后手一定不会填根,也不会填叶子,只能跟着先手消耗步数,如果总步数是奇数的话,后手只能选择填上根,可以获得 c+lst2

E

当一个联通块的点按照 dfs 序排序成环后,两两相邻 dis 一定刚好经过联通块内每条边两次。

每条边是被进去和出来时各经过一次。

对于一条路径,上面有些已经确定的边,如果还有没有确定的边,可以将剩下的边权和全部填上,简单维护即可。

F

观察到如果只有两个数,当差为 2k 是合法。

将差提出,结束条件显然是,所有差为奇数且差相等。

当差为 1 时合法。

考虑三个数,差为 a,ba<ba,b 都是奇数。

拆成三个数 a,a+b2a,a+b2

惊奇地发现 gcd(a,a+b2a,a+b2)=gcd(a,b)

于是最后所有的差都为 gcd 除去 2 的因子,有单调性。

G

如果只有排序的话,就是第 i 小的搭上第 i 大的最优。

hot!!

拆成若干条件,1ik,cnt(1,i)cnt(ki+1,k),表示不能与 i+1 填在一起的数不能大于 i 的数。

对每个限制跑一遍即可。

H

显然需要每个点度数 3,根的度数 2

如果以某个点作为根的话,深度就是根到所有点的最远距离。

要让这个最小。

考虑线段树维护每个点作为根的最远距离。

同时维护直径,以及直径中点。

加上一个叶子,会使直径中点移动,对【每个点作为根的最远距离】的影响是直径中点某个方向的子树全体加一。

posted @   蒟蒻orz  阅读(53)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2022-08-01 CF1051G Distinctification
2022-08-01 AGC020E Encoding Subsets
2022-08-01 Let's Play Nim
2022-08-01 CF1149C Tree Generator™
点击右上角即可分享
微信分享提示