神秘训练

Day 1

P10856 【MX-X2-T5】「Cfz Round 4」Xor-Forces

解题

  • 对于下标 xor 可以用 Trie 刻画。
  • Trie 节点对应的区间大小等于 \(2\) 的高度次幂,所以完全可以保存所有变换下的信息。
  • 每条边(意思是 \(i\)\(i+1\) 间的空隙)可以以中点空隙的形式对应到线段树上。

总结

  • 分治法通常可以刻画较为大量的信息(指 \(\tilde{O}(len)\))。
  • 尽量通过递归问题使得分治只需要处理关于中心的信息。

P12546 [UOI 2025] Convex Array

解题

  • 明显是要求 b 下凸。
  • 贪心失败可以尝试 DP。
  • 只关心两端的最外面两个。可以用 \(O(n^4)\) 的状态刻画。
  • 考虑 \(i-2,i-1,i\) 至少有两个相邻,会直接占据一侧,也即其中一侧只有 \(O(1)\) 种情况。于是两侧的状态数其实只有 \(O(n^2)\)
  • 状态值是 \(01\),考虑换维,状态数变成 \(O(n)\)
  • 只有当 \(i-1,i\) 在同一侧时对面才有两个数。换言之,当 \(i-1,i\) 不在同一侧时状态只有 \(O(1)\) 种(对于固定 \(i\) 而言)。
  • 考虑 \(i-1,i\) 在同一侧的更新只有清空和单点加。线段树维护即可。

总结

  • 考虑清楚刻画(转移)实际需要的信息。
  • 一些常规 DP 优化技巧。
  • 本题中对 \(i-2,i-1,i\) 分讨的思路。

P12264 『STA - R9』咏叹调调律

解题

  • 首先考虑判定。
  • 类似匹配的题目可以考虑类似括号序列。
  • 考虑用 \(-2,-1,1,2\) 的权值来刻画这个序列,A\(2/-1\)B\(-2\)C\(1\)(就是保证每种情况都是先大后小最后变成 \(0\))。
  • 于是存在一种给 A 附权的方式使得前缀和非负且总和为 \(0\) 是一个必要条件。贪心的,肯定是一段前缀为 \(2\),后缀为 \(-1\)
  • 注意到 AACB2 -1 1 -2 但是消不掉。
  • 考虑实际的判定。由于 2 更难消所以会优先匹配 2,-2。考虑记录前面剩下的 1,2 的个数,每次
    • 碰到 -1,可以和 2 结合变成 1,但是后面只能匹配 -1,且可以被 -2 抢夺。如果找不到 \(2\),就找 1 结合消除。
    • 碰到 -2 优先找 2 或者去抢特殊的 1,否则就只能找两个 1
  • 特殊的 1 时刻只有不超过 \(1\) 个,所以直接记录状态 \((i,j,k,s,t)\) 表示当前长度,1 个数,2 个数,2 -1 个数,当前 A2/-1。转移是 \(O(1)\) 的,所以是 \(O(n^3)\)

总结

  • 类似匹配的问题可以用括号序列刻画。

P10001 [集训队互测 2023] 优惠购物

解题

  • 简化题意,假设 \(x_i\) 表示 \(i\) 时花了多少优惠券,\(s_i=m+\sum_{j=1}^i\lfloor\frac{a_j-x_j}{c}\rfloor-\sum_{j=1}^ix_j\)(即 \(i\) 做完后优惠券个数),那么就相当于在保证 \(x_i \leq \min(b_i,s_{i-1})\) 的情况下最小化 \(\sum x_i\)
  • 考虑调整的思路。初始时令 \(x_i=0\),再对其进行调整。考虑使用优惠券会使得额外获得的优惠券 \(\lfloor\frac{a_j-x_j}{c}\rfloor\) 变少从而影响后面的选择,于是我们考虑调整每次要从 \(\lfloor\frac{a_j-x_j}{c}\rfloor\) 变化最少的地方修改。
  • 根据这个变化量我们可以把对 \(x_i\) 的调整操作分为 \(3\) 个阶段:
    • \(x_i\) 置为 \([0,a_i \bmod c]\) 中的数。此阶段对 \(\lfloor\frac{a_j-x_j}{c}\rfloor\) 没有影响。
    • \(x_i\) 不断加上 \(c\)。此阶段每加上一个 \(c\) 额外获得就会减少 \(1\)
    • 最后进行一次加上 \(v<c\)。此阶段减少 \(1\)
  • 三种情况的优先级是递减的(一阶段没有代价最优,二阶段每 \(c\) 个产生一个代价次优)。
  • 于是先处理第一种情况,由于此时无后效性所以直接正着处理即可。没有取到 \(a_i \bmod c\) 的就可以直接扔掉了。
  • 然后第二种情况。由于代价相同,操作后面的影响更小,倒着处理即可。考虑每次增加 \(c\) 个,对于后面的 \(s_i\) 的影响就是 \(\Delta=-c-1\)。于是当前位置 \(i\) 进行操作的次数上限就是 \(\min\left(\lfloor\frac{b_i-x_i}{c}\rfloor,\lfloor\frac{s_{i-1}-x_i}{c}\rfloor,\min_{j>i}\lfloor\frac{s_{j-1}-x_j}{c+1}\rfloor\right)\)。倒着维护最后一个 \(\min\) 即可
  • 最后是第三种情况。我们要优先做代价小(即 \(v\) 大)的。在位置 \(i\) 最多使用 \(\min(b_i-x_i,s_{i-1}-x_i,\min_{j>i}s_{j-1}-x_j-1)\)。考虑到这个式子部分单调(就是 \(\min(s_{i-1}-x_i,\min_{j>i}s_{j-1}-x_j-1)\) 单调递增),只从这部分意义来说时刻可行的是一段后缀,于是我们离线一下,在 \(b_i-x_i\) 时再把 \(i\) 加入考虑即可。可以用区间加区间求 \(\min\) 的线段树维护 \(s_{i-1}-x_i\) 的值,用个 std::set 维护可行集合,每次从可行集合里取出最大的,如果可以就修改并删除即可。

总结

  • 贪心调整的应用。如何确定调整的顺序?如何进行调整?

P10002 [集训队互测 2023] 树哈希

所以通过代码都 \(>10KB\) 是吗。

解题

大概会了,先咕着应为我可能想写代码。

总结

  • 等价类的思路。
  • 集合划分容斥。
  • 分治?(就是小的部分暴力,大的部分容斥)

P10011 [集训队互测 2023] 网格图最大流计数

我可能想做所以先放在这里。

这三题来自 2023-2024 集训队互测 Round 1 (Oct 28, 2023)

P14471 [集训队互测 2025] 火花

亿些树上背包技术。给了两个参考资料,我先学习完再来搞这题。

参考资料:
官方题解

额外找到的一个讲决策单调性的:https://www.cnblogs.com/AFewSuns/p/quadrangle-inequality.html

解题

总结

Day 1.5

接下来三题降低难度休闲一下。

P11057 诈骗题

解题

  • 操作是二元的带一个两种情况的系数,可以用图论有向边建模。
  • 但是直接这样有一个很直观的问题,没法区分 \((x,y,*)\)\((y,x,*)\)
  • 于是简单的方法是将行点和列点区分开来,行用 \(1 \sim n\),列用 \(n+1 \sim n+m\)
  • 回到原图。点之间在同行(或列)且不同方向会指示其操作的先后顺序。有环肯定无解,否则就是一个 DAG,一定可以构造出解。
  • 将这个条件回代入转化图(这里补充一下,定义 \(x \to y+n\) 表示 \((x,y,R)\))。首先,点只能有一个出度,否则会形成二元环。对于大于 \(2\) 的环长(肯定是偶数)对应转化图上的环,也不能存在。
  • 根据后面的条件,选出来的子图只能是 DAG。同时前面的条件又说明一定是一个内向树。然后就变成完全二分图生成树计数了,这是经典问题。

总结

  • 图论建模

为什么图论建模后往往会变直观呢?

Day 2

AT_agc072_a [AGC072A] Rhythm Game

解题

会了,等会再写。

总结

  • 如何权衡形式化题意和其他(如何做出一个相对优秀的模型转化)
  • 有时候详细的刻画会让人忽略弱化模型在推广回来的思路。

AT_agc072_c [AGC072C] Human Exercise

解题

会了,等会再写。

总结

  • 打表也是一种技术。
posted @ 2026-01-28 09:03  Aysct  阅读(2)  评论(0)    收藏  举报