练习题总结 8
CF1153E - Serval and Snake
先找性质。
判断一个点是不是头或尾,直接问这个点的答案,如果是 \(1\) 就是头或尾。
那一个长 \(1\) 宽 \(2\) 的长方形呢?如果答案是奇数则里面恰好一个头或尾(如果头尾都在的话,答案是偶数)。
这个发现的原理是什么?是两个点的答案的和,再减去中间连的那条边的影响,而这个影响恰好为 \(2\),即偶数。
拓展出:一个矩形的答案是奇数,则里面恰好一个头或尾。
ok,性质推完。行列各扫描一遍不就好了。
如果头和尾在同一行或同一列,怎么办?二分出那个行或列即可。
CF2124E - Make it Zero
发现元素和为奇数时无解,然后想不出来了。先玩玩 \(n = 2\)。
- 两元素不同直接无解
那就再玩玩 \(n = 3\)。
- 设两次操作 \([A+B,A,B],[C,D,C+D]\)(显然这一定能解决 \(n=3\) 的所有情况)。
- 有 \(A+B+C=a_1,A+D=a_2,B+C+D=a_3\)
- 解得 \(B+C=\frac{a_1-a_2+a_3}{2},A=\frac{a_1+a_2-a_3}{2},D=\frac{-a_1+a_2+a_3}{2}\)
- 想要有解就得 \((-a_1+a_2+a_3),(a_1-a_2+a_3),(a_1+a_2-a_3)\) 都是偶数且非负。
- 即 \(a_1+a_2+a_3\) 是偶数且 \(2 \times \max(a_1,a_2,a_3) \le a_1 + a_2 + a_3\)。
- 然后我们竟然用代数的方法解出了答案!
能不能把 \(n>3\) 缩为 \(n=3\)?可以,然后做完了。
QOJ - #12150. AGI
显然线段之间两两配对,对三种线段关系讨论一下即可。
两线段包含,小的 'N' 大的 'T' 即可。
两线段无交集,两个 'N' 即可。
按剩下的一定都是按 \(l\) 排序后 \(r\) 也单调递增。注意到这题答案其实没有卡死,一 T 一 N 下去即可。
luogu - P4587 [FJOI2016] 神秘数
先想平方暴力。对一个集合,从小到大枚举,若 \(a_i <= x + 1\),则 \(x \leftarrow x + a\),否则答案就是 \(x + 1\)。
考虑优化这个过程。先看能不能优化到只走 \(\log\) 次就得到答案。
计算 \([1,x + 1]\) 中所有元素的和 \(s\),如果 \(x + 1 <= S\),就 \(x \leftarrow S\),否则答案就是 \(x + 1\)。
第一步把答案集合拓展了 \([x + 1, S]\),也看不出复杂度有啥特别的。
第二步呢?答案集合拓展了 \([S+1, [1,S] 中所有元素的和]\),即 \([S+1, S+[x+1,S] 中所有元素的和]\)。
\([x+1,S] 中所有元素的和\) 显然大于 \(x\)。也就是说这两步,\(x\) 直接翻了个倍。那这样走最多走 \(\log\) 次就得到答案。
QOJ - 6656 先人类的人类选别
写的题解:https://www.luogu.com.cn/article/6kjibjtd
[AT_ttpc2024_1_e] ReTravel
考虑区间 dp。
对区间 \([l,r]\),从 \((\min\limits_{i=l}^{r}{x},\max\limits_{i=l}^{r}{y})\) 出发。发现如果回到过一次起点,转移显然,如果没有回到过起点,那直接走下去即可(可以缩为更小的区间)。
CF771D - Bear and Company
直接看题解 https://www.luogu.com.cn/article/zrhvjepi 即可。
CF331C3 - The Great Julya Calendar
先发现,每次减掉最大的位即可。
然后记忆化搜搜,具体见题解区。
CF1601D - Difficult Mountain
感觉很难 dp,那就来想贪心。
如果只有 \(s > a\) 的,按照 \(s\) 从小到大选即可。
如果只有 \(s < a\) 的,按照 \(a\) 从小到大选即可。
然后发现,按照 \(\max(s,a)\) 从小到大选即可。
CF1227F2 - Wrong Answer on test 233 (Hard Version)
对于 \(h_i = h_{i + 1}\),可以直接忽略 \(i\),并最后答案乘个 \(k\)。
我们把 \(h\) 循环左移一位得到 \(h'\),而且发现 \(h'\) 和 \(h\) 每一位都不同,现在限制变为:\(a_i\) 在 \(h\) 中相同的位数严格大于在 \(h'\) 中相同的位数。
枚举 \(a\) 与 \(h\) 或 \(h'\) 相同的位数 \(t\),则贡献为 \(\dbinom{n}{t} \cdot (k - 2)^{n - t} \cdot \sum\limits_{i=0}^{\lfloor \frac{t - 1}{2} \rfloor}{\dbinom{t}{i}}\)
CF325C - Monsters and Diamonds
注意到最大值的答案 \(-1\) 和 \(-2\) 都是最大值能无穷大,只是 \(-2\) 要求最小值存在。
考虑先求最小值。dp 式子显然,这个 dp 式可以用 dijstra 优化。
然后最大值直接 dfs 即可。
luogu - P2150 [NOI2015] 寿司晚宴
容易想到质因数分解。能想到的最基础的做法是什么?定义 \(f_{x,y}\) 表示两个序列的质因数集合(由于两个集合不能有交,所以总状态数 \(3^{质因数个数}\))然后顺序枚举 \(2\) 到 \(n\),修改 dp 状态。
需要用到的性质:一个数的质因数分解,最多一个质因数大于该数的平方根。
对 \(2\) 到 \(n\) 按照那个的质因数分组(不存在那个质因数)。每一组,要么只加入小 G,要么只加入小 W。
\(22\) 以内 \(8\) 个质数,时间复杂度 \(O(3^8 \cdot n)\)。实现时写成 \(O(2^{16} \cdot n)\) 也没问题。
[AT_tokiomarine2020_e] O(rand)
如果 \(a_i \texttt{ and } S < S\),或 \(a_i \texttt{ or } T > T\)忽略这个 \(a_i\) 即可。把 \(S\) 的那些位扣掉,只剩下 \(S \oplus T\) 的位,要求这些位有 \(0\) 且有 \(1\)。
如果考虑容斥,状态数共 \(3^{18}\) 种(每一位要么要求只有 \(0\),要么要求只有 \(1\),要么没要求)(每个状态的容斥系数就是 \((-1)^{有要求的位数}\))。别人说能卡过,但是考虑优化。
考虑枚举没要求的位,容斥系数确定了,接下来只用求和了。
luogu - P4898 [IOI 2018] seats 排座位
[ARC204C] Maximize Sum of Mex
给一个 \(n\) 的排列 \(P\),\(Q\) 次询问,每次询问给 \(A_0,A_1,A_2\) 满足 \(A_0+A_1+A_2 = n\):
- 要给这 \(n\) 个点,画 \(A_0\) 个 \(0\)、\(A_1\) 个 \(1\)、\(A_2\) 个 \(2\),求 \(\sum\limits_{i=1}^{n}{mex(col_i, col_{p_i})}\) 的最大值。
分讨题。
luogu - P8868 [NOIP2022] 比赛
给定 \(A_{1, \dots, n}, B_{1 \dots n}\),
以及 \(m\) 个提问, 每次提问给出 \(l, r\), 求\[\sum_{p = l}^r \sum_{q = p}^r \bigl(\max\nolimits_{i=p}^q A_i\bigr)\bigl(\max\nolimits_{i=p}^q B_i\bigr) \]答案要对 \(2^{64}\) 取模。
\(1 \le n,Q \le 2.5 \cdot 10^5\) 且 \(1 \le a_i,b_i \le n\),2s 且 512MB。
主要是发现一个形式化题意写的很好的题解,所以才来做这题 Link
这题类似 20251025 T4,从左往右扫枚举 \(r\),维护 \(f(l,r) = (\max\nolimits_{i=p}^q A_i\bigr)\bigl(\max\nolimits_{i=p}^q B_i\bigr)\),每个位置 \(l\) 还需要记录 \(f(l,?)\) 的和。
矩阵维护即可。
luogu - P5327 [ZJOI2019] 语言
给一棵树,有 \(m\) 条路径,求多少点对 \((i,j)(i < j)\) 满足存在一条路径覆盖这两个点。
\(1 \le n,m \le 10^5\)。
树链剖分然后二维 dfs 序,可以做到 \(O(n \log^3n)\),需要卡卡常。

浙公网安备 33010602011771号