随笔分类 - 做题报告(2023+)
发表于 2024-10-06 12:56阅读次数:73评论次数:0
摘要:https://codeforces.com/gym/104869/problem/K DS题尽量进一步思考,简化维护过程 权值线段树上二分 首先得出一个显然的转化:对于每次操作,求出此次下所有正数从小到大的前缀和的第一次大于所有负数和的绝对值的位置即为答案。 赛时做法 既然要求每次都求a升序下的前
阅读全文 »
发表于 2024-10-03 16:57阅读次数:16评论次数:0
摘要:板子 对顶堆 template<class T> struct DualHeap { Heap<T, std::greater<T>> small; // 小根堆,里面存放大的值 Heap<T, std::less<T>> big; // 大根堆,里面存放前k小的值 //中位数就是big.top()
阅读全文 »
发表于 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-02-12 09:31阅读次数:16评论次数:0
摘要:赛时犯大病,维护区间实现的时候把满足条件的区间末尾直接设置成区间开头,还找不出hack数据 分析 通过读题,可以得出两个结论: 数组中一组相同的数中只有一个能对答案造成贡献。 因为排列中每个数不同,相同的数加不同的数不可能得出相同的数。 一段去重后的数列要贡献答案长度,当且仅当该数列的
阅读全文 »
发表于 2024-02-01 16:07阅读次数:12评论次数:0
摘要:Problem - B - Codeforces 思路出来之后,需要计算 区间的个数。 我想的是计算出 的个数和 的个数,然后相减。 大体上是没问题,但是我的实现麻烦而且有错误。 初始代码 void solve() { ll l, r; cin
阅读全文 »
发表于 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阅读次数:58评论次数: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 思路相对好想,无非是把大小在头尾之间所有元素都走一遍。 但是实现上很有说法。 我的实现 就是把下标和值存到数组,然后按值排序。 找到下标为首、尾的元素排序后的坐标,然后做差。 但这里涉及非常多细节问题 做差得出的数字量
阅读全文 »
发表于 2023-12-25 12:48阅读次数:16评论次数: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]
阅读全文 »
发表于 2023-12-02 12:50阅读次数:113评论次数:0
摘要:P1017 [NOIP2000 提高组] 进制转换 负进制也一样用短除法转换,但是余数得保证是正数,不然没法用这个方法。 在求余的过程中加入处理: 如果负数,余数减去一个模数,上一次的商先加上一个模数再去除模数得到本次商。 比如对于 到 进制的转换。 第一次短除 \(-2
阅读全文 »
发表于 2023-11-28 20:25阅读次数:20评论次数:0
摘要:P5318 【深基18.例3】查找文献 基本思路 邻接表实现,结果得为了边有序再专门开一个 vector 预处理完再存边。 而且一开始忘记 vis[1] = true 了! #include<iostream> #include<algorithm> #include<cstdio> #includ
阅读全文 »
发表于 2023-11-28 19:25阅读次数:47评论次数:0
摘要:P1955 [NOI2015] 程序自动分析 基本思路 考虑到了不等号的不可传递性,所以决定只开相等的并查集。 然后突发奇想,觉得可以在找父亲的过程中判断是不是冲突。 然而这样就不能路径压缩,显然超时。 并且,根本没看清楚数据范围,实际上这题的数很大,裸开数组会爆炸。 这是一开始的代码 #inclu
阅读全文 »
发表于 2023-11-28 16:08阅读次数:4评论次数:0
摘要:P3879 TJOI2010 阅读理解 基本想法 开一个 map 组成的数组,然后每篇文章分配一个 map。查找的时候在每次都跑一遍。 显然 MLE 了。 改进 既然如此,录入的时候直接把单词出现对应的文章编号存起来就行,就是开一个 map<string, vector<int>>。 但是同一篇文章
阅读全文 »
发表于 2023-11-24 19:40阅读次数:2评论次数:0
摘要:P1364 医院设置 存树 struct Node { int left, right, father, value; } t[MAXN]; int main() { for (int i = 1; i <= n; i++) { cin >> t[i].value >> t[i].left >> t
阅读全文 »
发表于 2023-11-21 22:58阅读次数:20评论次数:0
摘要:P2234 [HNOI2002] 营业额统计 题解思路 对原数组排序,记录下排序前的位置。 对排序后的数组构造链表。 从原数组的 往 枚举,比较排序生成链表中该元素的前驱或后继与该元素差值的最小值,加入答案。 在排序生成的链表中删除该元素。 正确性的疑惑 一开始很困惑,难道排
阅读全文 »