随笔分类 - 具体问题 / 双指针
摘要:前言 没想到双指针, 只能度过相对失败的一生 思路 双指针 这好像没啥好说的, 维护一个滑动窗口, 滑着走即可 复杂度显然是 \(\mathcal{O} (nm)\) 离线算法 想到扫 \(l, r\) 都基本不能做啊 考虑扫值域 不难发现问题转化成 \(\mathcal{O} (n^2)\) 次加
阅读全文
摘要:思路 不难把区间拆成间隔 发现具有单调性但是不好处理删除 于是考虑马鹿尺取\(\textrm{baka's trick}\) 所以实际上 \(l\) 会回退, 输 参考代码 #include <cstdio> using namespace std; typedef long long ll; co
阅读全文
摘要:前言 \(\rm{T1}\) 没想到并查集实际上是糖了 但是差点完全想不到正解实际上是更糖的 其实我们只要在找性质的时候发现其不相关性即可 具体的, 只要你前面位置该占得占了即可 但是害怕害怕, 差点信心碎了满地, 害怕害怕 然后一个警示就是策略太复杂直接丢掉肯定假, 也就是换思路的必要性吧 从这上
阅读全文
摘要:思路 题意 有一个长度为 2×n+12 \times n + 12×n+1 的整数列表 aaa 初始恰好为 1∼2×n+11 \sim 2 \times n + 11∼2×n+1 的排列; 有一个集合 S\mathbb{S}S 初始为空, 进行 n+1n + 1n+1 次操作, 第 iii 次操作如
阅读全文
摘要:思路 题意 给定 nnn 个字符串 sis_isi , 一个字符串 ttt 要求构造一个字符串, 使得所有 sis_isi 都是其子串, ttt 不是其子串 简单判掉无解情况, 然后思考构造 不难发现, 我们可以用指针表示子串情况 每次我们在答案串中插入一个字符, 那么所有指向这个字符的指针都将
阅读全文
摘要:前言 更重要的是研究这题的部分分, 赛时居然可以做到 \(1 \ \rm{h}\) 没有拿到任何一个特殊性质 发现以前一直用的大标题很碍眼, 改了, 下课把之前的格式也改一下 思路 暴力 容易模拟, 做到 \(25 \%\) 特殊性质 \(\rm{A}\) 思路 你发现每一个区间都是其后面区间的前缀
阅读全文
摘要:思路 赛时完全没有思路 考虑 \(a_i - a_{i - 1} = 1\) 的转化 容易发现其等价于 \(a_{i - 1} - (i - 1) = a_i - i\) 把 \(a_i \to a_i - i\) 问题转化为 求将某一个区间全部变成同一个数的最优方案 考虑到这是经典贪心, 我们把一
阅读全文
摘要:算法 题意没什么可以转化的,已经很明确了。 容易发现当 \(k\) 确定且要进行移除前缀操作时,一定要尽可能的使前缀更大不然一定不优。 考虑动态规划,令 \(dp_i\) 表示移除 \(a\) 数组的前 \(i\) 项所需的最小总成本。 可以发现 \(dp_i\) 可以从 \(dp_j, 0 \le
阅读全文
摘要:题目分析 显然是一道双指针的题目 分析维护区间的特点 对于数列中的一个数 \(A\) 要求 \(B = A - C\) 可以发现 \(B\) 一定在一个连续区间内 双指针维护这个连续区间 先对这个数列排序 使得每次移动 \(A\) 时, 区间必定单向移动, 避免了走回头路 算法复杂度: \(O(N)
阅读全文

浙公网安备 33010602011771号