个人练习一句话题解

· · 个人记录

所有题目按做出顺序排序。

2025.5

练习链接。(\textcolor{green}{10}/\textcolor{red}{26})

做出顺序:VCTRLNEIAY。

V。简单模拟。但是看了好几遍都没读懂题,最后还是看了题解。map 即可。

C。发现不好 dp。数据范围很小,考虑图论建模。建出一个边权为 01 的图跑 dijkstra 即可。

T。简单模拟。拆一下位即可。但是不会证答案的范围,以为要跑很久,实际上就二十多万。

R。kruskal 模板。

L。发现 1248 都要被改掉,打表知 2 的幂都包含它们,但 65536 不满足这个条件。特判即可。

N。让最大的字母出现次数的最大值尽可能小,就尽可能平均分,向上取整一下,最后如果没有余数再把后面字典序最大的子序列接上即可。

E。正难则反,倒着放人,然后二分套树状数组进行模拟即可。

I。如果 xy 有多条路径,那肯定会构成环,然后因为环上所有边的异或和为 0,所以每条路径必然相等,然后随便找一条路即可,比如 x \to 1 \to y,预处理一下即可。

A。悬线法模板。从这篇题解学会了。

Y。完全二叉树,所以深度很小,设 t_{i,j} 是从第 i 个点开始染色,向下染 j 层的时间,c_{i,j} 表示染的颜色,这样修改就可以 O(1) 处理 tc,询问就把所有祖先的所有深度全枚举一遍,就有了跑不满的 2log,随随便便进最优解 Page 1。

2025.6

练习链接。(\textcolor{green}{6}/\textcolor{red}{26})

做出顺序:CSNHBK。

C。除了左上 - 右下对角线外的都可以抵消,然后简单维护即可。

S。用个 map 直接模拟,然而有可能被两个都是变量的情况卡掉,多跑几次即可,测试结果是 4 次。

N。发现无论在放哪个频道,它的下一个频道是固定的,链表模拟即可,要什么图论。

H。究极诈骗,因为当 n > 2 时,必然会同时有多个 79,取 7,77,9 或者 9,97,9 就能辨识,所以 n > 2 时没答案。

B。硬模拟,一个个插入即可。

K。先换再删一定不优,所以一定先把要删的删完,枚举删多少个,但是支持删除的数据结构很难搞,所以换一下,从大到小加进去,就是数逆序对了。

2025.7

练习链接。(\textcolor{green}{6}/\textcolor{red}{26})

做出顺序:XMWVCF。

X。总数不会变,所以直接枚举总数的因数并模拟即可,O(n \cdot d(sum)) 轻松过。

M。防止四舍五入,就直接让 A,B1000 的因数,取 A = 200,B = 500,然后就转成 5a + 2b = c,a \le 200,b \le 500 的构造,随便构造就好。

W。可以转化为对 1 \le k \le n\sum^{n}_{i = 1} \min^{i + k}_{j = i},相当于对 1 \le k \le n 求所有长度为 k + 1 的子串中的最小值之和。然后对每个数用单调栈求出左边第一个小于等于的,以及右边第一个小于的,这样 (l, r) 内的任意子区间的最小值都是 a_i。接着数区间、拆贡献可以得到一个区间加等差数列的式子,二阶差分即可。然而暴力一阶差分好像也能过。思维难度不及代码难度的 \frac{1}{10}

V。每个点最多只能被平推一次,所以最后肯定是一个一个小区间连着平推,且每次区间端点的 h 都相同,这就转化成了数每个数的出现次数,开个桶数一下即可。

C。简单模拟,题面能不能写好一点。

F。根号算法 111 !!!先考虑暴力,显然想求答案就需要求 uv 的相邻节点的交集,直接 bitset 可以做到 60pts,但是 4e10bitset 开不下,只能用根号分治进行优化:对于在询问中出现次数多的,放进 bitset;出现次数少的就暴力遍历相邻节点。可以做到 O(\frac{n \times \sqrt{n}}{w})!!!

2025.8

练习链接。(\textcolor{green}{5}/\textcolor{red}{26})

做出顺序:AVNDT。

A。考虑枚举有几个人参战,然后可以得到答案是 \sum^n_{i = 1} C^i_n \times (i - 1),随便推推或者放进 oeis 里搜一下就可以知道答案等于 (n - 2) \times 2 ^ {n - 1} + 1

V。简单最短路,答案必然是 \operatorname{dis}_{a \to b} + \operatorname{dis}_{b \to c}\operatorname{dis}_{a \to c} + \operatorname{dis}_{b \to c},取小的即可。

N。就是要去掉岛中湖中岛,先对最外层的大海八连通搜一遍,剩下的就必然是岛了(相当于把岛中湖填平),然后就是经典的四联通泛洪了。

D。直接暴力枚举基因对不太好做,考虑对于每个基因爆搜出与它能匹配的字符串集合,然后统计集合里有哪些字符串在给出的里面有就行了,因为长度只有 8,所以对每个字符串而言能匹配的只有 C_8^4 \times 3 = 210 个,8000 \times 210 是稳过的。

T。经典结论是每行 / 列最优情况下最多只会变一次,所以一旦确定了第一行要不要变,就可以确定每一列变不变,每一列确定后就一行一行地检验即可。