练习题总结 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\) 也单调递增。注意到这题答案其实没有卡死,一 TN 下去即可。

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)\),需要卡卡常。

posted @ 2025-02-17 10:56  hhhqx  阅读(15)  评论(0)    收藏  举报