随笔分类 - 具体问题 / 基础算法
摘要:思路 场上考虑的其实很有道理来着 考虑左右字符集已经相同的情况是简单的 否则一定要把左右字符集调整到相同 那我们首先不难发现一个至少要使用的区间, 计算方法比较复杂, 但是宗旨是把左右字符集调整到相同且可匹配的必要花费 然后我们应该拓展长的那一端, 直到字符集相同之后可以考虑断开, 以此来获得最优解
阅读全文
摘要:前言 心态: 冷静, 耐心, 放下 策略 停滞 数据检验, 关键步记录, 简化表述 思路 首先简化问题, 把无用的被包含的字符串去掉 这一步具体的实现方式是拼到一起之后做 \(\rm{KMP}\) 现在如果只有一个字符串, 那么显然答案就是它的最短循环节 如果有多个字符串, 如何做? 考虑最优解的构
阅读全文
摘要:思路 发现把有向图的可达性当成偏序集来看的话 本题求最大的链, 等价于求最小的反链划分 显然可以 \(\mathcal{O} (n^22^n)\) 的找每个集合是否能构成反链, 也即能否两两不可达 等价于找任意两个没有直接的无向边相连的集合 求划分是一个经典的超集 \(\rm{dp}\), 是 \(
阅读全文
摘要:思路 考虑 \(G = 1\) 因为进入顺序是不确定的, 怎么计算期望呢? 首先先列出期望相关的柿子 \[ \begin{gather*} E = \sum_{i = 1}^{n} \sum_{j = i + 1}^{n} \begin{cases} 1/2 & (\overrightarrow{i
阅读全文
摘要:前言 心态 策略: \(30\) 停滞不超过 \(15\) 数据检验, 关键步记录, 时刻简化 思路 首先考虑排序方法 对于赚钱的部分, 显然按照 \(a\) 排序 对于损失的部分, 考虑记这一部分为 \(a_{1, 2, \cdots, k}, b_{1, 2, \cdots, k}\), 记 \
阅读全文
摘要:前言 打的太烂了, 一定要注意策略 心态, 策略, 停滞 注意规划一下停滞时间 思路 删除一个合法括号序列, 问你删除后字典序最小的的合法括号序列是多少 我草, 场上啥都不会, 我要把失去的拿回来 考虑一下 \(n \leq 500\) 因为是取不取一个点的问题, 所以尝试类分段法 令 \(f_{i
阅读全文
摘要:前言 本来说看看算了的, 这个太猎奇了必须想一下 思路 这种询问是一个区间的, 确实不好搞 先不管询问区间 考虑 \(x\) 是有单调性的, 从这里入手 如果我们钦定 \(x_j\), 现在要找到 \(\min\limits_{i < j} (x_j - x_i)(w_i + w_j)\), 怎么做
阅读全文
摘要:思路 不妨令 \(a < b\) 首先不难发现根据 \(\rm{kruskal}\) 的思想, 显然应该是所有边权为 \(a\) 的边先加入, 再加入 \(b\) 的边 考虑这个过程 先把所有边权为 \(a\) 的边加入之后的图实际上也不是确定的, 但是我们可以知道产生的联通块情况, 然后再在联通块
阅读全文
摘要:思路 不难发现我们可以讨论中轴线的位置 如果在 \(A/E\) 在这里面, 我们的目标是让红色的这一段尽可能更好匹配, 也就是我们要找中轴线两侧最长的回文串+在这个基础上找到最长的黄段 否则在 \(C\) 不难发现此时我们 \(\mathcal{O} (n)\) 枚举中轴线, \(\mathcal{
阅读全文
摘要:前言 这题赛时是过了的, 非常磕磕绊绊, 在这理一下 思路 首先题解做法 不难发现每次落脚只可能是在萝卜或者大跳的位置 其中「大跳的位置」是不好维护的 这个时候我们发现只要指定要在哪些位置落脚, 大跳的数量是可以确定的, 于是这样列出 \(\rm{dp}\), 用一些技巧优化 然后我的做法比较神奇
阅读全文
摘要:前言 题解只是资料好吧 注意效率利用率 思路 首先, 我们不难发现模拟的方法 只要当前蛇吃了之后, 自己被吃了, 那么它一定不会吃了 进行一些模拟 不难发现相当于先让每条蛇都吃, 然后倒着做, 只要当前做出选择的这个蛇没有被吃, 那么就继续上传, 否则熔断, 传输当前阶段的答案 瓶颈在于空间复杂度
阅读全文
摘要:思路 \[ \begin{gather*} \sum_{i = 1}^{N - 1} \sum_{j = i + 1}^{N} \lvert x_j - x_i \rvert \\ \end{gather*} \]发现这不就是点对距离之和吗? 对贡献柿子进行一些处理 提取出 \(x_i\) 放到 \
阅读全文
摘要:思路 首先考虑约束条件 注意到其要求任意选择都要能做成匹配 也就是只要我选择了一些端点不相交的边, 那么剩下的一定要有解 这个约束太麻烦, 必须找到性质 补充一句, 应该是任意合法连通块, 不连通显然无所谓 那么问题变得拟人了 只需要把联通块拼成一些集合使得每个集合两边点数相等, 然后最小化每个集合
阅读全文
摘要:思路 \(80\%\) 应该是原题弱化, 先不管 考虑怎么解决最终状态数过多的问题 找点性质 考虑转移过程中, 余数 \(r\) 相当于是在一个图上跑, 那么不难发现最小的位数是任意非 \(0\) 点到 \(0\) 的最短路 简单对最短路经过的字典序做贪心即可 总结 有大量循环的, 尝试图论表示减少
阅读全文
摘要:思路 \(w\) 全为 \(0\) 显然可贪 考虑 \(w = 1\) 的情况 这显然不能背包 做法 \(1\) 注意到任何 \(2^w\) 可以视作 \(2^w\) 个 \(2^0\), 然后贪心 完全无法理解啊, 太超模了/kk 做法 \(2\) 首先一个性质是如果你还能放一个货物那你一定要放进
阅读全文
摘要:思路 首先直接 \(\rm{dp}\) 不行 注意到倘若我们钦定一个点对产生贡献, 那么我们可以任选一个合法的数填上, 然后这个数被废弃 进一步的发现要填的数必定是 \(1 \sim x\) 的, 而且点对的开头应该尽可能在前面选, 结尾尽可能在后面选 合一下 考虑 \(\textrm{pre}_i
阅读全文
摘要:思路 需要找点性质 直接贪显然假了 考虑有没有什么固定的最优解 注意到一种方案是 对于 \(a_i, a_{i + 1}\), 我们可以通过交换这俩然后再吃一个 \(a_{i + 1}\) 来超过 \(i\) 因此最优解有这样的构造方式 首先将整个 \(a\) 分成若干段, 然后在其中找一个元素,
阅读全文
摘要:前言 状态不佳 一定要做实事 思路 首先考虑分析问题 加入 / 删除三元组 \(\{F_i, T_i, B_i\}\), 每次操作后, 求 \(\sum_{i = 1}^{k} |T_i (F_i - f) + B_i|\) 的最小值 首先这样一类自己可以确定一个变量的问题, 不难想到函数转化 具体
阅读全文

浙公网安备 33010602011771号