随笔分类 -  做题报告(2023+)

摘要:https://codeforces.com/gym/104869/problem/K DS题尽量进一步思考,简化维护过程 权值线段树上二分 首先得出一个显然的转化:对于每次操作,求出此次下所有正数从小到大的前缀和的第一次大于所有负数和的绝对值的位置即为答案。 赛时做法 既然要求每次都求a升序下的前 阅读全文
posted @ 2024-10-06 12:56 加固文明幻景 阅读(127) 评论(0) 推荐(0)
摘要:板子 对顶堆 template<class T> struct DualHeap { Heap<T, std::greater<T>> small; // 小根堆,里面存放大的值 Heap<T, std::less<T>> big; // 大根堆,里面存放前k小的值 //中位数就是big.top() 阅读全文
posted @ 2024-10-03 16:57 加固文明幻景 阅读(37) 评论(0) 推荐(0)
摘要:https://codeforces.com/contest/1660/problem/F2 同余分组,树状数组维护逆序对 先承继F1的做法,维护一个前缀和数组,让 s[i] == '+' 为 \(1\),s[i] == '-' 为 \(-1\)。 那么要满足两个条件: \(pre_r - pre_ 阅读全文
posted @ 2024-05-28 20:36 加固文明幻景 阅读(34) 评论(0) 推荐(0)
摘要:Problem - 1373D - Codeforces 先看出了一个很显然的东西,逆转的子序列的长度必须是偶数。 但之后就想错了,想到双指针和其他方法去求这个最大段。 但我粗暴的通过 \(a_{i + 1} - a_i\) 来贪心双指针明显是不对的。 最大子段和 只要把 \(a_{i + 1} - 阅读全文
posted @ 2024-03-28 19:03 加固文明幻景 阅读(49) 评论(0) 推荐(0)
摘要:赛时犯大病,维护区间实现的时候把满足条件的区间末尾直接设置成区间开头,还找不出hack数据 分析 通过读题,可以得出两个结论: \(a\)​ 数组中一组相同的数中只有一个能对答案造成贡献。 因为排列中每个数不同,相同的数加不同的数不可能得出相同的数。 一段去重后的数列要贡献答案长度,当且仅当该数列的 阅读全文
posted @ 2024-02-12 09:31 加固文明幻景 阅读(40) 评论(0) 推荐(0)
摘要:Problem - B - Codeforces 思路出来之后,需要计算 \(l,r\) 区间的个数。 我想的是计算出 \([0,r]\) 的个数和 \([0,l]\) 的个数,然后相减。 大体上是没问题,但是我的实现麻烦而且有错误。 初始代码 void solve() { ll l, r; cin 阅读全文
posted @ 2024-02-01 16:07 加固文明幻景 阅读(34) 评论(0) 推荐(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 阅读全文
posted @ 2024-01-25 09:12 加固文明幻景 阅读(63) 评论(0) 推荐(0)
摘要:Problem - 1875C - Codeforces 本题判断无解的时候要判断该数是否为 2 的 k 次幂,我的做法是预处理出 2 的次幂数表。 看题解发现可以用 lowbit 操作。 lowbit操作 int lowbit(int x) {return x & (-x);} 根据补码原理,该操 阅读全文
posted @ 2024-01-22 16:39 加固文明幻景 阅读(86) 评论(0) 推荐(0)
摘要:Problem - 1878E - Codeforces 这题我想到了个大概,按位与的话结果肯定是递减的,而且要从二进制每一位下手,但是思路只停留在暴力对整个数操作。 当然,利用这个性质,肯定要二分。 拆位思想 比如要计算 1110001 1101110 0100010 我们知道最后结果肯定是留下都 阅读全文
posted @ 2024-01-22 15:51 加固文明幻景 阅读(103) 评论(0) 推荐(0)
摘要:https://codeforces.com/problemset/problem/1901/C 我发现对于向下取整向上取整的题目(不特指除二),没有一些常见的思路积累。 Description 给定一个长度为 \(n\) 的序列 \(\{a_n\}\)。每次操作你需要选择一个整数 \(x\) 并将 阅读全文
posted @ 2024-01-21 21:39 加固文明幻景 阅读(79) 评论(0) 推荐(0)
摘要:https://www.luogu.com.cn/problem/CF1904C 分讨,然后 \(k = 2\) 的时候肯定要写暴力,但是我的暴力很不优雅。 石山 void solve() { int n, k; cin >> n >> k; vector<ll> a(n + 1); for (in 阅读全文
posted @ 2024-01-21 19:08 加固文明幻景 阅读(35) 评论(0) 推荐(0)
摘要:https://www.luogu.com.cn/problem/CF1729C 思路相对好想,无非是把大小在头尾之间所有元素都走一遍。 但是实现上很有说法。 我的实现 就是把下标和值存到数组,然后按值排序。 找到下标为首、尾的元素排序后的坐标,然后做差。 但这里涉及非常多细节问题 做差得出的数字量 阅读全文
posted @ 2024-01-20 15:18 加固文明幻景 阅读(27) 评论(0) 推荐(0)
摘要:The Lakes 本质上是个染色问题,太久没写搜索,出现了错误。 最初做法 int main() { for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (vis[i][j] == false && a[i][j] != 阅读全文
posted @ 2024-01-05 20:38 加固文明幻景 阅读(29) 评论(0) 推荐(0)
摘要:越界问题处理 这题本身很简单,二分答案就行。 但是数据很大,提前开了ULL还是越界。 short check(ll x, vector<ll> a) { ll sum = 0; for (int i = 1; i <= n; i++) { sum = sum + (a[i] + x) * (a[i] 阅读全文
posted @ 2023-12-25 12:48 加固文明幻景 阅读(31) 评论(0) 推荐(0)
摘要:P1572 计算分数 看似数学题,实则数学思路很好想,主要是字符串处理难。 就只谈谈读入,读入一堆分数,又要判 / 又要判正负号。 纯用字符串一个个搞,麻烦的要死。 这时候就要借用语言本身对于数字的处理,对于数字就直接读数字类型,然后中间的读字符类型,这样判断正负号等难题都交给语言本身了。 scan 阅读全文
posted @ 2023-12-05 10:00 加固文明幻景 阅读(41) 评论(0) 推荐(0)
摘要:P1017 [NOIP2000 提高组] 进制转换 负进制也一样用短除法转换,但是余数得保证是正数,不然没法用这个方法。 在求余的过程中加入处理: 如果负数,余数减去一个模数,上一次的商先加上一个模数再去除模数得到本次商。 比如对于 \(10\) 到 \(-2\) 进制的转换。 第一次短除 \(-2 阅读全文
posted @ 2023-12-02 12:50 加固文明幻景 阅读(216) 评论(0) 推荐(0)
摘要:P1363 幻象迷宫 判断无限路径(判环) 难点就在判断该点是否会无限走过。 思路是维护目前 \((x,y)\) 下的传送次数,和历史上 \((x, y)\) 的传送次数。 如果 \((x, y)\) 已经被走过,且传送次数又和历史上不同,说明已经开始无限循环了。 #include<iostream 阅读全文
posted @ 2023-11-29 17:53 加固文明幻景 阅读(31) 评论(0) 推荐(0)
摘要:P2853 [USACO06DEC] Cow Picnic S 逆向思维 如果顺着题目走,不大好做。 考虑该题要求的是可以供所有奶牛到达的牧场,那么不如从奶牛所在的牧场下手 即对每个奶牛所在的牧场 \(DFS\),对所有到达点标记。 那么显然当一个点的标记等于 \(k\) 时,说明该牧场是合适的。 阅读全文
posted @ 2023-11-29 16:43 加固文明幻景 阅读(63) 评论(0) 推荐(0)
摘要:P4017 最大食物链计数 记忆化搜索 DP 角度解 从捕食者向被捕食者建边 维护每个生物的捕食 eat,和被捕食数量 beat。 对每一个食物链顶端 dfs,向下搜索直到找到最低级的生物,记忆化当前结点对应的食物链长度。 #include <iostream> #include <algorith 阅读全文
posted @ 2023-11-29 14:26 加固文明幻景 阅读(51) 评论(0) 推荐(0)