Loading

The 2nd Universal Cup. Stage 28: Chengdu 解题集

A. Add One 2

一个比较关键的想法是去考虑操作后什么样的数列是能够得到的,然后通过这个性质尝试得出比 \(\{y_n\}\) 大的最小合法数列,这个数列的和就是答案。

将数列差分,你会发现如果要使 \(x_i - x_{i+1} =d\)(这里不妨假设 \(d>0\),我们等会可以再倒过来考虑 \(d<0\) 的位置),那么我们至少要对 \(i\) 这个前缀操作 \(d\) 次,你先把这若干次减掉,不难发现此时其他位置的差分不受影响。

继续这样做直到所有数都相等,此时如果 \(x\) 非负则能够得到,否则你无法从 \(0\) 得到这样一组差分数列。

换句话说,考虑被减最多次的两个数 \(x_1\)\(x_n\),我们要求:

\[x_1 \ge \sum_{i=1}^{n-1} \max(0,x_i-x_{i+1}) \]

\[x_n \ge \sum_{i=1}^{n-1} \max(0,x_{i+1}-x_i) \]

不妨在前后加入一个极大值 \(M\) 分离 \(x_1\)\(x_n\) 的限制,这样我们就能得到一个非常简洁的限制:

\[2M \ge \sum_{i=0}^n |x_i-x_{i+1}| \]

这样我们的任务就变成了增加 \(\{y_n\}\) 并将其变成一个合法序列,不难发现每次最优的操作一定是将一个最短的下凹段抬升,这样可以将差分减小 2,可以用堆维护。复杂度线性对数。

B. Periodic Sequence

先找一个答案的上界,题解给出的方法是通过每个 \(S_i\) 都能被 \(S_1\) 的一个极长前缀和若干前缀表示,且 \(S_1\) 的某一前缀组合不能用其他组合来表示。

题解还给了求到这个上界的构造,这样确实是最大的,但是我并不太清楚怎么能想到这步/yun。

到这步之后尝试计算,不难得到数列的生成函数:

\[\sum_{k=1}^{\infty} \frac{x^k}{1-2x+x^{k+1}} \]

直接做是平方的,但注意到 \(k\) 变大后有用的项不会太多,考虑对这个柿子根号分治:

  • 对于 \(k \le \sqrt n\),直接把 \(\frac1{1-2x+x^{k+1}}\) 看成 \(\frac1{1-(2x-x^{k+1})}\),然后这个就变成了背包,每次可以从 \(i-k-1\) 以 -1 的系数转移,或者从 \(i-1\) 处以 2 的系数转移。

  • 对于 \(k > \sqrt n\),把分母拆开成 \((1-2x)(1+\frac{x^k+1}{1-2x})\) 然后看作 \(\frac1{1-(-\frac{x^k+1}{1-2x})}\)\(\frac1{1-2x}\),把前者再暴力展开,你会发现这里有用的就只有根号项了,可以类似秦九韶算法一样每次对所有 \(k\) 算指数相同的项的贡献,后者直接乘进前面一起算就行。

有两只 log 的 bouns,但是不会。也有不用 GF 直接 dp 并分析非 0 项的做法,和 GF 应该是本质相同的。

C. Colorful Graph 2

官方题解给出了一个非常巧妙的做法,直接对 bfs 后深度相同的节点染一个颜色,隔层不同,如果无解必定是同层的环,但是在这个图下同层不可能有环。

D. Min or Max

按照题意模拟即可。

E. Min or Max 2

min 和 max 操作的限制性是比较强的,我们尝试固定一组 \((x,y)\),考察它能够被算到答案里的充要条件,不妨设 \(x\) 在第 \(i\)\(y\) 在第 \(j\) 个位置出现,且 \(i \le j\),不难得到 \(\forall k>j\),必须有 \((a_k>x \wedge b_k >y) \vee (a_k<x \wedge b_k <y)\)

对于剩下的位置,如果在第 \(j\) 次必须取 min,那此时 \(x\) 必须跟一个大于 \(y\) 的数,否则相反。这样我们就找到了一组充要条件,并且这也方便计算。更具体地,我们维护对于每个 \(x\),目前能取到的最大和最小的 \(y\) 方便我们判定第二个条件,逐位扫并更新,然后计算 \(x\) 为当前 \(a_i\)\(y\) 为当前 \(b_i\) 的答案,为了确保第一个条件成立可能还要在线二维数点,复杂度线性对数。

题解里还提到了一个更好写的做法,一个前置性质是对于每个合法的 \((x,y)\),按照 \(x+y\) 排序后下一个一定是某一边 +1 或者两边 +1,然后就可以线段树维护矩阵快速查询某个 \((x,y)\) 是否合法,你只要记录每个位置能把状态变成什么样然后加速递推即可。性质我不是很会证,而且我写的时候被狠狠卡常了/ll。

F. Whose Land?

考虑按照 bfs 序对每个点标号,这样我们每次修改就只用暴力跳相邻的若干层,修改一段连续的节点,可以线段树维护。

G. China Convex Polygon Contest

首先,做题顺序肯定是先做时间短的题,于是问题变成现在有若干个节点,你可以把节点往后拖,最大化每个 \(a_i\) 到前面节点的距离和。

这个一看就很能反悔贪心,扫描 \(a_i\) 把序列分成的若干段区间,决策每个区间里最前面的 \(b_i\) 怎么选,可以用堆反悔决策。

H. The Game

思考过程跟题解好像有点不太一样,考虑如果是 Kevin 操作之后 Qingyu 获胜了,一定会剩下一个奇回文串,Qingyu 可以删掉中间的然后走模仿步,这样最后轮到 Kevin 的就是两个一样的字符,不难发现任意一个获胜局面都可以被这么转换。

于是我们就只用考虑两人怎么操作可以使最后不剩下两个一样的字符,不难发现此时两人的最优策略一定是 Qingyu 删一个的字符,Kevin 删不是一个的和他抵消,模拟上述过程进行判断即可。

I. All the Way Left

计算几何题,不会。

J. DFS Order 5

找充要条件,假设我们已经走了根到第一个节点的这段链,然后按照平常 dfs 的逻辑判断是否合法,比如是否进入了走过的子树,或是还没遍历完子树就走出来了。

K. Sticks

很神秘的题,这种计数对象有多种合法条件的题我们一般都固定一处唯一的判定方法,再在那里计算,比如这题里我们考虑每次删掉最后一行,保证最后一行伸出去的最短,你会发现此时只要当前行的操作合法,当前行怎么操作是不会影响到前面的决策的,因此我们总是这么保证然后 dp,dp 时需要记录前缀最大值,每次考虑填一行并保证这是你能填的最短距离。

L. Exchanging Kubic

先问 \(n\) 次之后把相邻部分合并,接着我们可以考虑我们是否有可能会选到某个负数,最不可能的位置就是最小正数的两旁,问一下,如果回答不等于两边的正数那我们就能确定这个负数的值。

如果你两边都没能确定,那你可以确定一点就是肯定不存在一个选区间最大的方案在这个正数处停止,因为你把最后两个部分割掉一定更优,不妨直接合并掉,然后钦定其中一个负数为中间这个正数的相反数,这样就变到子问题了,不难发现操作数最多取到 \(2n-1\)

M. Bot Friends

先考虑第一次操作,如果向右,那右边的就可以向左,这样右边的就不用产生贡献,否则这次操作其实没有改变任何东西,我们递归到了一个子问题,如果右边的向左了,那这步会一直持续,直到遇到一个不按对应方向走的机器人,于是又递归到子问题。

形式化地说就是我们每次可以用 1 花费消掉一部分连续(注意这里可以前面花费代价消掉挡路的来确保连续)的 \(\text{>>>>...<<<<}\),且两边个数绝对值不能超过 1,类似括号匹配一样写个 dp 维护上述过程即可。

好像还有笛卡尔树的解释,不过看的不是很懂,不过也许本质相同?

posted @ 2024-10-07 16:51  eastcloud  阅读(138)  评论(0编辑  收藏  举报