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)个点的方案数为(A_{n-2}^{e-1}),这条链上的边权和为(m),利用隔板法可知方案数为(C_{m-1}^{e-1}),其余的边的边权都可以任意设定,因此方案数为(m^{n-e-1}),最后还需要的就是,其余的点以链上的点为基础构成的森林的方案数。根据Cayley's formula的一般形式,可知点集({ 1,2,..,n}) 构成的森林,且其中({1,2,...,k})属于不同的树,的方案数(T(n,k) = kn^{n-k-1})证明。因此答案可表示为 (sum _{e=1}^{min(n-1,m)}A_{n-2}^{e-1}C_{m-1}^{e-1}m^{n-e-1}T(n,i+1))
(~) 91 CF1117A
(~) 92 CF1117B
(~) 93 +CF1117C 对于每个a[i],找到最小的经过的周期数k,解不等式,答案一定在交点附近,讨论正负,验证
(~) 94 +CF1117D 答案等价于(sum_{i} C_{n-im}^i),手推几组可以发现(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(10^{18})),总体是一个(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(n^326)),算起来应该超时严重。。。剪剪枝,卡卡常。。最后发现主要原因是多写了一组无用的转移导致(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](https://codeforces.com/contest/1137/submission/51191578)操作1和操作3后,答案一定是最左端的点,答案的都容易维护。对于操作2,我们维护一个左下凸的凸壳,显然这个答案点一定在凸壳上,并且维护凸壳之上的修改操作,对于新加的点答案一定是这一段的左端点,它的实际值为0,于是我们就可以假设它上面打着修改标记,计算它应有的值,然后加入这个点。加等差数列不会改变凸壳上应有的点,我们可以在凸壳上三分,或者直接从栈弹栈顶,直到找出实际上的底部的点。
$~$ | F. Matches Are Not a Child's Play| AC | [题解](https://www.cnblogs.com/RRRR-wys/p/10527816.html)
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 | - |
原文地址:https://www.cnblogs.com/RRRR-wys/p/10099078.html