Codeforces 刷题记录(已停更)
Codeforces 每日刷题记录 (已停更)
打‘+’是一些有启发意义的题目,部分附上一句话题解,每日更新3题,大部分题目较水。
Day | ID | Problem | Tutorial | Note |
---|---|---|---|---|
1 | 1 | +CF1073E | 状压,数位dp,官方题解std骚操作 | |
2 | CF1072A | |||
3 | CF1072B | |||
2 | 4 | CF1072C | ||
5 | CF1068C | 读题恶心 | ||
6 | CF1073D | 猜复杂度,模拟 | ||
3 | 7 | CF1088A | ||
8 | CF1088B | |||
9 | CF1088C | 构造思想 | ||
4 | 10 | CF1066A | ||
11 | CF1066B | |||
12 | CF1066C | |||
5 | 13 | +CF1088E | 推结论,tree dp,贪心 | |
14 | CF1065A | |||
15 | CF1065B | |||
6 | 16 | CF1064A | ||
17 | CF1064B | |||
18 | CF1064C | 结论 | ||
7 | 19 | gym102028F | 焦作F,模拟 | |
20 | CF1090A | |||
21 | CF1090B | 模拟 | ||
8 | 22 | +CF1090D | 构造 | |
23 | +CF1090J | kmp的fail树,计数,推导,树dfs,HDU5129 | ||
24 | CF1065C | |||
9 | 25 | CF1084A | ||
26 | CF1084B | 读题。 | ||
27 | CF1084C | |||
10 | 28 | CF1059A | ||
29 | CF1059B | |||
30 | +CF1059C | 贪心构造思想 | ||
11 | 31 | +CF1083A | tree dp,推结论 | |
32 | CF1060A | |||
33 | CF1060B | |||
12 | 34 | +CF1083E | 斜率优化dp | |
35 | CF1060C | 任意一个矩阵的值,相当于a的一段区间和乘b的一段区间和 | ||
36 | CF1060D | 二分图匹配,贪心 | ||
13 | 37 | CF1093A | ||
38 | CF1093B | |||
39 | CF1093C | |||
40 | CF1093D | |||
41 | +CF1093E | 带修改二维数点,bit套pbds / cdq / 卡内存 | ||
14 | 42 | CF1051B | ||
43 | CF1051C | |||
44 | CF1051D | |||
15 | 45 | +CF1089A | dp,背包,输出方案 | |
46 | +CF1093G | 观察可得两点之间的k维曼哈顿距离,可以通过枚举每一维的正负表示,线段数维护2^k种情况 | ||
47 | CF1081A | |||
16 | 48 | CF1092A | ||
49 | CF1092B | |||
50 | CF1092C | |||
17 | 51 | CF1081B | ||
52 | CF1081C | |||
53 | CF1081D | |||
55 | +CF1092D1 | 贪心 | ||
18 | 54 | CF1081E | ||
56 | +CF1092D2 | 贪心+线段树模拟+卡时 | ||
57 | +CF1092F | tree dp | ||
19 | 58 | +CF1093F | 计数dp+容斥 dp[i][j]表示1到i都合法,且第i个数为j的方案数 | |
59 | CF1033A | |||
60 | CF1033B | |||
20 | 61 | CF1058A | ||
62 | CF1058B | |||
63 | CF1058C | |||
21 | 64 | +CF1092E | 贪心构造,将每颗树的中心(到最远点的距离最小)连成菊花图,中间是直径最大的树 | |
65 | CF1085A | |||
66 | CF1085B | |||
67 | CF1085C | |||
68 | CF1085D | |||
22 | 69 | CF1047A | ||
70 | CF1047B | |||
71 | CF1047C | |||
23 | 72 | +CF1087E | 搜索,边界处理,直接模拟难以实现时,要想到搜索 | |
73 | CF1041A | |||
74 | CF1041B | |||
75 | CF1041C | |||
76 | CF1041D | 双指针,注意更新边界 | ||
24 | 77 | CF1036A | ||
78 | CF1040A | |||
79 | CF1040B | |||
25 | 80 | +CF452E | 插入特殊字符后拼成一个串建后缀自动机,right[i][id]表示状态i,代表的子串中,出现在id串的次数 | |
81 | CF474A | |||
82 | CF474B | |||
26 | 83 | CF1095A | ||
84 | CF1095B | |||
85 | CF1095C | |||
86 | CF1095D | n = 3时,要特判 | ||
27 | 87 | CF469A | ||
88 | CF467A | 下一秒cf崩了,这几天真的颓 | ||
28 | 89 | CF1091A | ||
90 | CF1091B | |||
91 | CF1091C | |||
92 | CF1091D | |||
29 | 93 | +CF528D | 字符串FFT,对 于s的每个位置i的每种字符计算它的匹配数,四种字符的和如果为m则位置i可以匹配 | |
94 | +CF1091E | 题解 | ||
95 | CF109A | 完全背包 | ||
30 | 96 | CF1095E | 左括号看作1,右括号看作-1,线段树维护前缀和 | |
97 | CF1096A | |||
98 | CF1096B | |||
99 | CF1096C | 多边形的外接圆 | ||
31 | 100 | CF1097A | 病了几天不会做题了 | |
1 | CF1097B | |||
2 | CF1097C | |||
3 | +CF1097D | 期望递推式$E(x,k) = \frac{1}{\sigma_0(x)} \sum_{d | x}E(d,k-1),E(x,k)是关于x的积性函数,因此对预处理E(p^m,k)$合并即可 | |
32 | 4 | CF1099A | ||
5 | CF1099B | 读题 | ||
6 | CF1099C | 读题 | ||
33 | 7 | CF1038A | ||
8 | CF1038B | |||
9 | CF1038C | |||
34 | 10 | CF1027A | ||
11 | CF1027B | |||
12 | CF1027C | 贪心 | ||
35 | 13 | CF950A | ||
14 | CF950B | |||
36 | 15 | CF950C | 贪心,线段树 | |
37 | 16 | CF954A | ||
38 | 17 | CF1101A | ||
39 | 18 | CF1101B | ||
40 | 19 | CF1100A | ||
20 | CF1100B | |||
21 | CF1100C | |||
22 | +CF1100E | 二分,拓扑排序。一开始发现几个DAG并起来一定可以无环,于是写了二分+拓扑排序判环,输出方案想了一个奇怪的做法,把图按编号分为几个弱联通分量,之后讨论,反向的边是在两个分量之间,还是在一个分量内。。然而直接把图拓扑排序完,然后按拓扑序连边不就行了嘛。。。awsl | 这段时间事儿太多了,基本没做题。。放假! | |
41 | 23 | CF1101C | ||
42 | 24 | CF1102A | ||
25 | CF1102B | |||
26 | CF1102C | |||
43 | 27 | +CF1100F | 异或线性基,zkw线段树,卡常,这个做法很好想,但是卡常之路很艰辛ac代码 | |
44 | 28 | CF1009A | ||
29 | CF1009B | 0和2相对位置不变,1可以任意移动 | ||
45 | 30 | +CF1101D | 类似dfs求树的直径 | |
31 | CF1101E | |||
32 | CF998A | |||
33 | CF998B | |||
34 | CF998C | |||
46 | 35 | CF1105A | ||
36 | CF1105B | |||
37 | CF1105C | |||
38 | CF1105D | |||
39 | +CF1105E | 最大独立集,状压,折半。参考了评论区有人提到的做法,把点分成两份,分别处理他们每种情况下的最大独集,最后合并答案,具体见代码把 | ||
40 | CF1104A | |||
41 | CF1104B | |||
42 | +CF1104C | 精准鉴别我是zz | ||
47 | 43 | CF1008A | ||
44 | CF1008B | |||
45 | CF1102D | |||
48 | 46 | CF1108A | ||
47 | CF1108B | |||
48 | CF1108C | |||
49 | CF1108D | |||
50 | +CF1108E1 | 最终的最大值不会被覆盖 | ||
51 | +CF1108E2 | 上一题加预处理 | ||
49 | 52 | CF1107A | ||
53 | CF1107B | |||
54 | CF1107C | |||
55 | CF1107D | |||
50 | 56 | +CF1108F | 最小生成树 | |
57 | CF864A | |||
58 | CF864B | |||
51 | 59 | CF1099D | 推式子,贪心 | |
60 | CF864C | 模拟 | ||
52 | 61 | +CF786B | 线段树优化建图 | |
62 | CF897A | |||
63 | CF897B | |||
53 | 64 | CF897C | 模拟 | |
65 | CF899A | |||
66 | CF899B | |||
54 | 67 | CF1037A | ||
68 | CF1037B | |||
69 | CF1037C | |||
55 | 70 | CF1106A | ||
71 | CF1106B | |||
72 | CF1106C | |||
73 | CF1106D | |||
56 | 74 | +CF1107E | 区间dp,记忆化搜索, | |
57 | 75 | CF1111A | ||
76 | CF1111B | 注意边界 | ||
77 | CF1111C | 注意边界 | ||
58 | 78 | CF1110A | ||
79 | CF1110B | |||
80 | CF1110C | |||
81 | +CF1110E | 注意操作对差分序列的影响 | ||
59 | 82 | CF1114A | ||
83 | CF1114B | 猜结论 | ||
84 | CF1114C | 运算爆long long | ||
60 | 85 | CF1114D | 区间dp | |
61 | 86 | CF1113A | 在家躺几天,回归本质了 | |
87 | CF1113B | 读错题。 | ||
88 | CF1113C | |||
89 | CF1113D | 细节写炸。 | ||
62 | 90 | +CF1109D | 计数。题意:求给定两点之间的边权和为m,总点数为n个的树的个数。做法: 固定两点之间边的数目e,挑出e个点的方案数为Ae−1n−2,这条链上的边权和为m,利用隔板法可知方案数为Ce−1m−1,其余的边的边权都可以任意设定,因此方案数为mn−e−1,最后还需要的就是,其余的点以链上的点为基础构成的森林的方案数。根据Cayley's formula的一般形式,可知点集{1,2,..,n} 构成的森林,且其中{1,2,...,k}属于不同的树,的方案数T(n,k)=knn−k−1,证明。因此答案可表示为 ∑min(n−1,m)e=1Ae−1n−2Ce−1m−1mn−e−1T(n,i+1) | |
91 | CF1117A | |||
92 | CF1117B | |||
93 | +CF1117C | 对于每个a[i],找到最小的经过的周期数k,解不等式,答案一定在交点附近,讨论正负,验证 | ||
94 | +CF1117D | 答案等价于∑iCin−im,手推几组可以发现m=2时答案为Fib(n),然后发现dp(n)=dp(n−1)+dp(n−m) 矩阵快速幂求解 | ||
63 | 95 | CF1131A | ||
96 | CF1131B | |||
97 | CF1131C | |||
98 | +CF1131F | 倒着考虑整个过程,其实就是每次把一个区间的两个数之间切成两半,那么这显然可以构造一颗二叉树,每个非叶子节点代表切的那一刀,叶子节点表示最后这个位置的数字,那么如果我构造出了这颗二叉树,就显然可以dfs一遍输出叶子节点的值即可。现在考虑自底向上的构造这棵树,对于一个分割隔开的两个点中的任意一个,如果它已经出现了,就把这个点所在的树的根接到当前节点上,如果没有,就新建一个节点作为叶子节点,查询一个点所在树的根可通过并查集实现,复杂度不考虑并查集是O(n)的 代码然而崩了没写出来。。。当时认为直接用并查集+vector模拟合并的过程会tle,之后意识到如果每次都用小的合并到大的里,复杂度貌似是O(nlogn)? | ||
64 | 99 | +CF1109E | 任意模数区间乘x,单点除x,区间求和。考虑将Mod分解,将每个x按素因子是否属于Mod分成两个集合,第一个集合是所有的属于Mod的因子,第二个集合是剩余的因子。对于第二个集合的因子,他们的乘积一定与Mod互素,因此一定存在逆元,这部分的除法可以转化为乘逆元;对于第一集合显然它的因子总数不多,所以我们对每个因子存下它的指数项,做除法时直接减去对应的指数项。考虑用线段树维护答案,每个节点维护的Lazy标记,包含集合一中每个素因子及其指数项,集合二的乘积,以及答案。需要注意的是一开始的序列我们要将他们当作lazy标记,避免做除法时出现问题。还要注意合并答案时会多次用到集合一中素数的次幂,需要将预处理出来,否则会Tle。Code | |
100 | +CF1131D | 建图,倒着拓扑序递推 | ||
1 | CF1130A | |||
2 | CF1130B | |||
3 | CF1130C | |||
4 | +CF1130D1 | 每次取当前节点走的最远的糖 | ||
65 | 5 | +CF1130D2 | 根据上一题的结论,对于一个起点s,我们考虑每个车站发完所有糖的时间,取个最大值就是答案 | |
6 | CF1023A | |||
7 | CF1023B | |||
66 | 8 | CF1118A | ||
9 | CF1118B | |||
10 | CF1118C | |||
11 | CF111F1 | |||
67 | 12 | +CF1129B | 构造 | |
13 | CF984A | |||
14 | CF984B | |||
68 | 15 | CF1118D1 | ||
16 | CF1118D2 | |||
17 | +CF984C | 判断分母q,是否包含一个因子a,没有出现在b内。每次从q中除去它与b的gcd,同时将b修改为他们的gcd,b,q的下降速度都是log(1018),总体是一个log,正确性显然。。。 | ||
69 | 18 | +CF1129C | unoldered_set大法好!给定一空串s,长度[1,4]的26个2进制电码,代表不同的字母,每次在s后添加一个0或1,问当前的串s,及其子串可以表示多少种不同的转码后的字符串。首先,对于长度不同的01串,一定不可能被转成相同的字符串,对于一个固定的01串,两种不同的合法分割方法一定可以构成不同的转码后的串。因此,对于01串中每个区间dp预处理这个区间有多少种合法的划分,F(l,r)表示区间[l,r]的合法划分方案数,对于长度相同的串,hash判重,统计答案即可。一开始set超时了,unolder_set差4ms超时,艰难卡过去了。。。Code | |
70 | 19 | +CF1131E | 对于p1∗p2∗...∗pn倒着考虑整个字符串乘法的过程。情况一:假设当前获得的字符串Now包含2种及以上种类数的字母,那么答案就是枚举剩余的没有成进来的串的所有字符,是否可以与Now的前缀后缀叠加更新答案。情况二:对于Now如果它是只有一种字符串考虑将它与之后的串合并,如果可以合并出一个只包含一种的串就继续合并,如果不行,计算出乘法之后的前后缀,更新答案进入情况一。注意对答案的更新 | |
20 | CF1013A | |||
21 | CF1013B | |||
71 | 22 | CF1132A | A 3发过 B 2发过。 | |
23 | CF1132B | |||
24 | CF1132C | |||
25 | +CF1132F | 区间dp, 复杂度是O(n326),算起来应该超时严重。。。剪剪枝,卡卡常。。最后发现主要原因是多写了一组无用的转移导致Tle的 | 出思路+写代码30min,调试+怀疑人生50min。 | |
72 | 26 | +gym102059A | 题解 | |
73 | 27 | CF1046C | ||
28 | CF1051A | |||
74 | 29 | CF1138A | ||
30 | +CF1138B | 任意等分为两组,计算两组有用人数的差值,交换不同种类的演员,将差值调整为0 | ||
31 | CF1138C | 读题。 | ||
75 | 32 | CF1137B | kmp,贪心 | |
33 | CF1133A | |||
34 | CF1133B | |||
35 | CF1133C | |||
36 | CF1133D | |||
37 | CF1133E | |||
38 | +CF1133F1 | 排序之后,倒着dp,dp[i][j]表示选了以第i个数作为左端点的区间,i到n中一共使用了j个区间的最大覆盖范围,讨论转移:一种左端点在当前区间内部,用对应右端点最远的更新,另一种左端点在外部,用这些dp值的最大值更新答案 |
----------- update 2019/3/10
打算之后按套题更新。。。尽量完整的补完一套题。希望能坚持下去吧。。。
Contest | Problem | Status | Note |
---|---|---|---|
Codeforces Round #545 (Div. 1) | C.Museums Tour | AC | 官方题解 Code空间时间都卡满 |
E. Train Car Selection | AC | Code操作1和操作3后,答案一定是最左端的点,答案的都容易维护。对于操作2,我们维护一个左下凸的凸壳,显然这个答案点一定在凸壳上,并且维护凸壳之上的修改操作,对于新加的点答案一定是这一段的左端点,它的实际值为0,于是我们就可以假设它上面打着修改标记,计算它应有的值,然后加入这个点。加等差数列不会改变凸壳上应有的点,我们可以在凸壳上三分,或者直接从栈弹栈顶,直到找出实际上的底部的点。 | |
F. Matches Are Not a Child's Play | AC | 题解 | |
Codeforces Round #544 (Div. 3) | F2. Spanning Tree with One Fixed Degree | - | - |
Educational Codeforces Round 61 (Rated for Div. 2) | D. Stressful Training | - | |
E. Knapsack | - | ||
G. Greedy Subsequences | - |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步