随笔分类 - 知识总结 / TRICK
1
发表于 2024-09-25 14:06阅读次数:15评论次数:0
摘要:https://codeforces.com/problemset/problem/1920/C 同余的一个性质: 证明很显然,但是想不到这个性质 题意 给你 个数,划分 段,每段在对 取模之后相等即为一个合法方案,问有多少个合法方案。 断点 //
阅读全文 »
发表于 2024-06-15 16:23阅读次数:26评论次数:0
摘要:https://codeforces.com/contest/1879/problem/D 关键在于互换两个 的顺序 一般像这样计算所有子区间的式子,如果要优化成接近线性,有一种可行思路是把注意力放在右端点,通过不断移动右端点,在移动的时候利用前面的统计结果算出移动右端点后的结果
阅读全文 »
发表于 2024-05-28 20:36阅读次数:11评论次数:0
摘要:https://codeforces.com/contest/1660/problem/F2 同余分组,树状数组维护逆序对 先承继F1的做法,维护一个前缀和数组,让 s[i] == '+' 为 ,s[i] == '-' 为 。 那么要满足两个条件: \(pre_r - pre_
阅读全文 »
发表于 2024-03-28 19:03阅读次数:18评论次数:0
摘要:Problem - 1373D - Codeforces 先看出了一个很显然的东西,逆转的子序列的长度必须是偶数。 但之后就想错了,想到双指针和其他方法去求这个最大段。 但我粗暴的通过 来贪心双指针明显是不对的。 最大子段和 只要把 \(a_{i + 1} -
阅读全文 »
发表于 2024-03-13 12:50阅读次数:19评论次数:0
摘要:Problem - D - Codeforces 用记忆化搜索过的,然而DP能快300ms 记忆化搜索 | 模拟 核心思路一致,都是通过定义一个状态,即在第t次到达第now点来去重剪枝 记忆化搜索 int n, m, x; std::vector<std::pair<
阅读全文 »
发表于 2024-03-12 21:26阅读次数:51评论次数:0
摘要:Problem - G - Codeforces 思路 一开始写了一个无脑BFS剪枝求最短路,然后顺带更新最小线路数量,被hack了。 应该直接针对问题处理,通过BFS直接求最小线路数量。 这题可以转化成对于一个单点,只有两种选择 走与当前颜色相同的点,答案不变 走与当前颜色不同的点,答案加一 这被
阅读全文 »
发表于 2024-03-12 21:11阅读次数:10评论次数:0
摘要:https://www.luogu.com.cn/problem/CF1702E 转化题意 把所有数连边,判断是否为二分图。 染色法 void solve() { #define tests int n; std::cin >> n; std::map<int, std::vector<int>>
阅读全文 »
发表于 2024-03-12 17:32阅读次数:11评论次数:0
摘要:Problem - 1730B - Codeforces 贪心解法 由绝对值的性质易证。 那么直接把 算到距离中,转换成求最左和最右“坐标”的中间点的简单问题。 //通过把t[i]算到距离中,转换成求最左和最右坐标的中间点的简单情况 v
阅读全文 »
发表于 2024-03-10 14:02阅读次数:33评论次数:0
摘要:Problem - B - Codeforces 维护前缀区间mex和后缀区间mex,枚举二者相同的断点 原理 随区间增长, 只可能增,不可能减,所以可以用一个变量维护目前的 ,区间扩大后可以直接沿用较小区间的 ,再处理增加即可。 维护 \
阅读全文 »
发表于 2024-03-07 13:39阅读次数:20评论次数:0
摘要:Problem - 1676H2 - Codeforces 思路 原问题可以以直接转化成求 的数量。 归并排序 原理很直接,归并排序就是为了减少逆序对的数量,所以直接在操作的时候记录减少的数量即可 排序后的数组无逆序对,归并排序的合并操作中,每次后段首元素被
阅读全文 »
发表于 2024-03-06 11:43阅读次数:29评论次数:0
摘要:Problem - C - Codeforces. 思路 首先很显然对 数组排序能最小化 的花费。 难点在 的选择,因为已经对 排序,不可能再兼顾 的优劣,所以 需要类似枚举的技术,这是一个类似搜索最优子集的问题,可以用 \(D
阅读全文 »
发表于 2024-03-02 11:36阅读次数:20评论次数:0
摘要:Problem - B - Codeforces 被DP给限制思路了 思路 其实可以枚举前四个硬币的数量,然后通过倍数关系和更优的方案来限制每个硬币的枚举区间,最后再对剩余的值是否是最后一个硬币的倍数做检查,是就根据最小更新答案。 一块钱最多两个,因为三个就可以直接用三块钱代替 三块钱最多一个,因为
阅读全文 »
发表于 2024-02-01 16:07阅读次数:12评论次数:0
摘要:Problem - B - Codeforces 思路出来之后,需要计算 区间的个数。 我想的是计算出 的个数和 的个数,然后相减。 大体上是没问题,但是我的实现麻烦而且有错误。 初始代码 void solve() { ll l, r; cin
阅读全文 »
发表于 2024-01-31 16:00阅读次数:27评论次数:0
摘要:基本情况 A、B秒了,C二进制拆位处理短板,卡了很久,D没想出来,甚至二分都没考虑。 C. XOR-distance Problem - C - Codeforces 这题算是给我上了一课, 二进制拆位处理真该好好学学了。 思路 思路很好想,从高位往低位处理: 先找到最高的不同的位 如果是上 \(1
阅读全文 »
发表于 2024-01-25 09:12阅读次数:27评论次数:0
摘要:Problem - 1819A - Codeforces 快速计算mex int calcMex(vector<int> v) { sort(v.begin(), v.end()); v.erase(unique(v.begin(), v.end()), v.end()) int n = int(v
阅读全文 »
发表于 2024-01-22 16:39阅读次数:11评论次数:0
摘要:Problem - 1875C - Codeforces 本题判断无解的时候要判断该数是否为 2 的 k 次幂,我的做法是预处理出 2 的次幂数表。 看题解发现可以用 lowbit 操作。 lowbit操作 int lowbit(int x) {return x & (-x);} 根据补码原理,该操
阅读全文 »
发表于 2024-01-22 15:51阅读次数:59评论次数:0
摘要:Problem - 1878E - Codeforces 这题我想到了个大概,按位与的话结果肯定是递减的,而且要从二进制每一位下手,但是思路只停留在暴力对整个数操作。 当然,利用这个性质,肯定要二分。 拆位思想 比如要计算 1110001 1101110 0100010 我们知道最后结果肯定是留下都
阅读全文 »
发表于 2024-01-21 21:39阅读次数:28评论次数:0
摘要:https://codeforces.com/problemset/problem/1901/C 我发现对于向下取整向上取整的题目(不特指除二),没有一些常见的思路积累。 Description 给定一个长度为 的序列 。每次操作你需要选择一个整数 并将
阅读全文 »
发表于 2024-01-21 19:08阅读次数:14评论次数:0
摘要:https://www.luogu.com.cn/problem/CF1904C 分讨,然后 的时候肯定要写暴力,但是我的暴力很不优雅。 石山 void solve() { int n, k; cin >> n >> k; vector<ll> a(n + 1); for (in
阅读全文 »
发表于 2024-01-20 15:18阅读次数:10评论次数:0
摘要:https://www.luogu.com.cn/problem/CF1729C 思路相对好想,无非是把大小在头尾之间所有元素都走一遍。 但是实现上很有说法。 我的实现 就是把下标和值存到数组,然后按值排序。 找到下标为首、尾的元素排序后的坐标,然后做差。 但这里涉及非常多细节问题 做差得出的数字量
阅读全文 »
1