Loading

[div 2 C] tricks

内容说明

关于一些常见的 div 2 C\textrm{div 2 C}tricks\rm{tricks}

长期更新

想想出题人为什么这么出?

  • 先从已经确定的部分开始考虑

  • 先排除无效元素

  • 定义操作 (约束) 和开销 / 收益, 要求最值化开销 / 收益

    • 将约束条件数学化
    • 模拟操作情况, 贪心处理最好开销 (将简单情况先处理, 然后在基础上处理最值 / 简化操作)
    • 考虑操作对答案的影响 (推式子) , 据此对操作进行处理
      • 推导每个元素对答案的贡献 \((\)拆贡献\()\)
      • 推导动态规划
    • 判断是否存在操作满足约束
      • 模拟, 对于重复情况去重
    • 要求一个数列的多个部分 \((\)前缀, 子串 \(\cdots\)\()\) 的成本
      • 贪心找到最优操作的构造方法, 加上优化 / 找共同点
    • 找到所有情况统一的构造方案
      • 然后逐操作贪心
    • 枚举开销所需要的一个值\((\)超过 \(x\) / 不大于 \(x\) / 和小于 \(x\) 中的 \(x\)\()\) , 然后考虑对于这个值进行贪心
    • 先找到一组简单的合法解, 然后在基础上进行调整, 使其花销更优
  • 定义合法情况, 要求输出一组合法情况 / 合法情况的最值问题 / 求方案数

    • 模拟操作情况, 找到最好开销, 注意最大和最小
    • 列出合法情况需要满足的表达式, 在原序列中贪心选择最优情况
    • 构造: 先推性质, 不行打表
    • 找到不合法情况在什么时候出现, 通过对不合法情况的转化构造最优的合法情况
    • 往往利用 \(\rm{dp}\) , 结合约束处理当前方案
    • 先找到一组合法解, 然后在基础上进行调整
  • 定义操作, 要求把 \(a \to b\)

    • 逆向思维, 把 \(b\) 拆成 \(a\)
      • \(\rm{STL}\) 维护
    • 考虑操作是否能构造出单位操作, 在用单位操作的性质去做题 \((\)一般是到了哪里就不能操作了\()\)
    • 打印操作方法
      • 考虑一种构造策略
    • 约束仅存在于操作顺序/每个元素的状态上
      • 考虑对约束顺序/状态建图判环
  • 逆向思维

    • 只要结果确定, 完全可以考虑倒推
  • 不动点 + 动点交换

    • 在不动点之间的部分找构造方式
  • 奇偶类问题

    • \(\Delta = 1\)
      直接记录
    • \(\Delta = 1\)
      • 贪心的下传 \(> 2\) 的部分
  • 乱搞

    • 数据范围小
    • 答案范围小
      枚举每次操作, 剪枝
  • 括号序列

    • 转化成 \(1, -1\)
    • 使用括号树
      • \(ans, cnt\) 计算合法括号串数量
        之前的 \(ans\) 和最外层括号的数量 \(cnt\)
      • 利用分层特性
  • 博弈

    • 有平局先处理平局
    • 考虑操作的本质, 最终可以怎么样, 然后确定答案 (简单博弈)
    • 考虑先手可以怎样控制后手的选择\((\)选择位置下标的奇偶性\()\), 然后讨论是否有必胜策略
      • 讨论总长度的奇偶性
    • 先手控制后手
    • 先手跟随后手 / 后手跟随先手
    • 区间问题考虑 \(\rm{dp}\)
  • 字符序列

    • 回文问题
      • 模拟操作情况, 贪心找到最好开销
  • 交换相邻元素性质

    • \(a\)\(b\) , 交换 \(|a - b|\)
    • 对于两个串的定位问题, 每个元素定位的花费就是关于其的逆序对个数
      证明: 从大权值到小权值, 逐个固定位置
    • 往往用固定之前的部分, 移动当前的部分来解决
  • 子序列类问题

    • 对于涉及到 \(1, -1\) 的问题, 善于通过 \(\Delta\) 和前缀后缀来解决
  • \(a \to b\) , 定义固定操作, 求最初对 \(a\) 怎样操作使得 \(b\) 的某个性质最值化

    • 找到贪心性质
  • 点对问题

    • 区间问题往往可以转化成点对问题
    • 点对贡献维护, 类似扫描线的思路, 一维枚举
      • 一维数据结构处理
      • 往往可以通过之前计算过的 \(l\) 来继承, 类似 \(\rm{dp}\)
      • 一般来说, \(L\) 从右往左, \(R\) 从左往右枚举
  • 定义约束, 要求满足约束的原序列数

    • 逆向思维
  • 二进制相关问题

    • 往往可以拆成每一位考虑 \((\)贪心\()\)
    • 异或
      • 注意结合律
  • 动一个点要求计算每一个位置的答案

    • 前后缀类拼接问题
      • 预处理前后缀, 然后拼拼拼
    • 区间包含数量问题
  • 费用提前计算可以省去一维

    • 常见的模型: 时间叠加
posted @ 2025-02-12 17:00  Yorg  阅读(9)  评论(0)    收藏  举报