![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Codeforces
玛珈山大萌新
破山中贼易,破心中贼难。不破不立,破而后立,立而为人。
展开
-
Codeforces Round #701 (Div. 2) F. Copy or Prefix Sum
题目:F. Copy or Prefix Sum分析:参考题解通过水平线优化空间和时间,可以将二维变成一维,并且使得每次循环map至多新增一个节点,看了一上午,终于看懂了代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗//typedef __int128 lll;#define print(i) cout << "debug: "原创 2021-02-16 12:16:34 · 124 阅读 · 0 评论 -
[逆向思维]Codeforces Round #698 (Div. 2) E. Nezzar and Binary String
题目:E. Nezzar and Binary String分析:这个题按时间从后往前思考,会发现如果不让他生气,每次修改的操作都是唯一的,用一个线段树维护即可代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗//typedef __int128 lll;#define print(i) cout << "debug: " <&l原创 2021-01-29 15:36:38 · 252 阅读 · 0 评论 -
Educational Codeforces Round 102 (Rated for Div. 2)
题目:E. Minimum Path分析:这个题首先是最短路问题。只保留公式的第一项的话,就是最朴素的最短路问题。现在加了两项,很显然是最短路的变形。现在我们可以定义最短路为:总路径长度必须删除一条边的权值、添加一条边的权值。这样我们可以将原来的一维dis数组升为3维,dis[i][j][k],j表示是否删除了一条边,k表示是否添加了一条边。dis[i][1][1]就是最终我们要求的代码:#include <bits/stdc++.h>using namespace std;原创 2021-01-17 16:45:35 · 97 阅读 · 0 评论 -
Codeforces Round #695 (Div. 2)
题目:D. Sum of Paths分析:这个题目就难在如何求出每个位置经过的次数。看到数据量想到dp我们设f[i, j]表示走了i步到达j的方案数。状态转移及其简单,这里不写了。然后思考如何求出每个点经过的次数cnt[j]。cnt[j] = f[i, j] * f[k - i, j] (后一项可以看成走了i步到j之后,再走k - i步的逆过程)由于两个过程是独立的,所以用乘法代码:#include <bits/stdc++.h>using namespace std;ty原创 2021-01-13 22:55:19 · 68 阅读 · 1 评论 -
Educational Codeforces Round 95 (Rated for Div. 2)补题
题目:D. Trash Problem分析:用set维护元素(将线性表的增删操作由O(n)优化成O(log(n))),用multiset维护差分.学习迭代器相关函数。(prev, next)注意点:multiset的erase(x)表示删除所有为x的值,erase(it)删除迭代器指向的单个元素。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//typedef __int128 lll;原创 2020-09-17 11:59:37 · 180 阅读 · 0 评论 -
Codeforces Round #670 (Div. 2)
题目:C. Link Cut Centroids分析:先恶补一波树的重心的基础知识:定义:树上一节点最大子树的节点数最小;性质:删除重心后所得的所有子树,节点数不超过原树的1/2,一棵树最多有两个重心,且相邻。树中所有节点到重心的距离之和最小,如果有两个重心,那么他们距离之和相等;两个树通过一条边合并,新的重心在原树两个重心的路径上;树删除或添加一个叶子节点,重心最多只移动一条边;这个题的特殊点其实就是重心,那么我们可以先找出重心,看是否唯一,如果唯一则随便输出同一条边。不唯一的话,原创 2020-09-13 22:17:10 · 174 阅读 · 0 评论 -
Codeforces Round #669 (Div. 2)
题目:D. Discrete Centrifugal Jumps分析:代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//typedef __int128 lll;#define print(i) cout << "debug: " << i << endl#define close() ios::sync_with_stdio(0), cin.tie(0原创 2020-09-12 14:50:17 · 108 阅读 · 0 评论 -
Codeforces Round #659 (Div. 2) 题解
B.Koa and the Beach分析:贪心策略:对每一步维护一个水位 0-k,我们假定当前位置最高承受的水位为maxd,now为当前的水位如果maxd>=k,则now=k否则,now = min(now - 1, maxd)如果now为负(水位处于上升状态),且此时abs(now)>maxd,则无法通过等待水位的调整来度过,也就是只能淹死。代码:#include <bits/stdc++.h>using namespace std;typedef long l原创 2020-07-26 16:29:54 · 273 阅读 · 0 评论