日志 | 2025.8
-
250801
今天继续完成前面的题目,包括 CF571A和前两次比赛的C题
CF571A
发现直接求比较困难,考虑求出总方案数再减去不合法的方案
枚举加上的数字 \(k\) ,可将 \(k\) 分为 \(3\) 个数的问题转化为 \(k\) 个小球外加 \(2\) 个挡板,则方案数为\(C_{k + 2}^{2}\)
对于不合法的方案数,不合法的情况一定满足,\(a', b', c'\)中存在一个数 \(>\) 其它两个数的和,枚举该数并保证当前总长度加上其它两个数的和小于枚举的数
-
250802
A
期望:\(100\) \(\quad\) 实际:\(55\) \(\quad\) 耗时 : \(80min\)
枚举答案并进行校验,考试的时候枚举的范围过大导致超时。
前面花了不少时间,所以考试时过了大样例就没管了,完全没有发现写了一个毫无用处的枚举
B
期望:\(25\) \(\quad\) 实际:\(25\) \(\quad\) 耗时: \(1h\)
一开始看到只会第一档和第五档的,后面发现第二档分讨一下即可得到
其实子任务\(2\)会做后\(3, 4\)两档分也容易得出,只是多了几个段而已,这\(20\)分应该要拿
然后子任务\(5\)是暴力\(dp\),考场上最后试着写了一下没写出来,实际很简单......又是20分
所以其实这题即使不会正解暴力分也有不少,不应该只拿这点分
C
期望:\(0\) \(\quad\) 实际: \(0\) \(\quad\) 耗时 : \(20min\)
考试看到完全不会,压根没想连通块,实际上\(m \le 2000\) 已经很明显了。
前 \(20\) 分把合法的边选出来加入并查集,直接算答案就行,这档分是一定要拿的
对于第二档 \(k\) 为 \(2\) 的幂次的情况,说明 \(k\) 与 \(d_i\) 二进制下前面几位要相同, 可按照 \(d_i / k\) 分组, 还是并查集做,这档也算是想想能够到的吧
D
期望:\(25\) \(\quad\) 实际:\(0\) \(\quad\) 耗时 : \(45min\)
第二档分,\(x = y\) 的情况相对还好写点,\(x = y\) 说明操作只与\(AB\)的个数有关, 且如果\(AB\)个数合法,就一定能加出来
-
250803
今天主要复习图论。
A (CF1255C)
看完思考了大概\(15min\),思路比较简单,实现稍微麻烦点
\(p_1, p_n\)只会被覆盖一次,\(p_2, p_{n - 1}\)会被覆盖两次,同时 \(p_1, p_2\) 一定在同一个三元组中,所以找到\(p_1\)以后就能找到 \(p_2,p_3\) ,以此类推就都能找
B (P9650)
对于多个终点的问题卡了一会,同时对于至多\(d_i\)个出口需关闭的问题不会。
至多 \(d_i\) 个出口关闭,则对于最短路过程中到达的每个点,由于该点是当前权值最优的点,判断该点当前是否还要封闭出口,如果要就封锁,否则继续转移加边
类似这种多个终点反着来跑的做法比较套路,反应速度还要加快,出口关闭的问题要结合做法的根本原理。
C (P5839)
求出了由一个颜色修改为另一个颜色的最小花费,剩下不知道怎么做
实际上 \(dp\) 就行, \(dp_i\) 表示前 \(i\) 位均组成连续 \(\ge k\) 的段的最小代价,前缀和计算出 \((i,j)\) 之间填颜色 \(c\) 的代价 \(S(i, j, c)\),转移就是 \(min(d_j + S(i, j, c)), j \le i - k\)
枚举 \(j\) 不可行,可将前缀和拆开,维护前缀最小值 \(v_c = min(d_j + s_{j, c})\),便可进行\(O(1)\)转移
这个 \(dp\) 包括优化都不算难,应该是要想到的,优化部分通过决策集合单调递增可以推出。
H (P6062)
二分图匹配,不太记得了都,稍微复习了下
-
250804
A (0/30, 2h)
一直在想\(60\)的做法,式子显而易见但考试的时候方案数推错了,还有组合数预处理的时候范围只写到了n导致答案不对。
然后到最后才去写了前两档的分,没写完于是一分没有。
不会二项式定理,但至少应该写出60分。
二项式定理:\((a + b) ^ n = \sum_{k = 0} ^ {n} C_{n}^{k} \times a ^ {n - k} \times b ^ k\)
B (40/40, 30min)
前面两档分可以搜索或者\(dp\) 实现
C (25/25, 35min)
看完就写了前两档暴搜的分 发现部分分给的很多 本打算再想一下的但写前面的去了
dp可以实现后面几档分 稍微想一下应该要写出来的D (20/20, 30min)
看完第二档分的条件后觉得可做 但后面发现不会找是否存在另一条为d+1的边
总结
时间分配很不合理,T1浪费了太多时间还没得分非常不应该,当一档分写了很久还没写出来的时候先去写前面的分保底
-
250805
完成前几天的题目
A (CF1679D)
思考了大概20分钟,不知道怎么处理从每个点开始的问题,题目中最小化最大值明显可以考虑二分,这点没有想到,然后判断是否存在长度为\(k\)的链或环可以用拓扑排序。
-
250806
今天主要复习树的相关知识
A (CF1336A)
思考约20min,想到一个点若作为工业城市,则其下面的点应均为工业城市才为最佳选择方案,可以贪心选取,实现比较容易,大概10min
B (P5536)
想了大概15min不会,看到最小化最大距离还想了下二分,但也不知道怎么判断一个距离是否可行。
实际上需考虑什么时候时最大距离,对于任意一点,树上距离最远的即为直径的一个端点,而在直径中点的时候距离最短,没有想到这一点
实现不算复杂,两次dfs找到直径以后从中点再dfs一次计算每个点最远能走的距离,但计算直径终点的部分除以二取整有问题,调了很久,大概花了50min
-
250807
A (50/30, 45min)
看到 $n \le 2000 $ 只有30分有点慌,想了很久也不会别的更快的做法了只能硬写
\(O(n log n)\) 求最长上升子序列还想了一会,居然还跑过了\(1e4\)这一档
由于排列是随机的,可以每次倒着模拟删除一个元素的过程,如果当前元素在最长上升子序列中就修改后重新计算一遍,否则不管,复杂度可通过
改的时候对于如何判断当前元素是否在最长上升子序列中还卡了一会,实际上只要每次转移的时候记一下自己前面的数,最后标记一遍即可
随机数据 这么做确实是想不到,下次或许可以试着想一下数据随机时的性质?
B (0/0, 1h)
看完题大概15min想到了暴力做法,对应第二、三档,但是没有考虑单独的0的问题,导致答案错误
其实这个问题随便造组样例就能调出来,考试的时候因为写了比较久,脑子有点乱,看了其他样例也没发现问题,这两档肯定要写出来的。
C (5/5, 25min)
考试时对于a = 0不会计算两个不同数字之间插了以后还能再插的情况。
D (0/10, 40min)
搜索都能挂了,因为没开longlong 加上有可能一个点有多条限制的情况
第二档和第三档分可以dp,考试时有尝试过。
总结
主要还是各种要命的细节问题,试样例的时候仔细点,过了样例也再检查一下
-
250808
主要练习数论
A (CF947A)
思考大约10min,没有想到\(x_i - p_i + 1 < x_{i - 1} < x_i\) 这一结论。
题目中已经给出了 \(x_{i - 1} < x_i\) 以及 \(p_i\) 是\(x_{i - 1}\) 的倍数, 应往三者大小关系的方向考虑
B (CF1499D)
想了大概25min,将\(lcm(a,b)\) 转化为了 \(\frac{ab}{gcd(a,b)}\) ,但是不知道怎么继续。
实际上只要把\(a, b\) 继续表示为\(gcd(a, b) * k\)的形式, 将 \(gcd(a, b)\) 用已知数和\(k1, k2\)表示便可计算答案。
对于这种式子,应当考虑将主要的未知数(例如本题中的gcd(a,b))用已知表示,便于计算
C (P12021)
思考15min,主要不会在如何确定选的数,以及对于每次选的不同的数都要符合要求不选k倍的数
关键在可独立考虑每个集合的方案数,便能够进一步推出计算方案的方式
-
250809
补完了前天考试的B题 (CF1584E)
一段区间若合法,则需每个子区间都要满足奇数位的和等于偶数位的和,写的时候在加减号交替和删去map中不合法元素的地方理解了很久,照着推了个样例就明白了
-
250810
A (20/40, 40min)
k = 2 的情况分讨了半天但是写错了,易发现答案很小。
B (60/60, 30min)
暴力做法很快就能想出,考试时没有看出二分的性质,正解应该是二分+st表
C(30/30,20min)
65分内都可以用背包做,实现比较容易,应该要写出来的
D (0/20, 40min)
前20分就是暴力dp,这档分应该要拿的,
-
250811
上午补了之前树的题单,完成CF1244D, CF1790F
CF1244D
思考了大约20min,发现如果一个节点有两个及以上的分叉,则无法满足题目中连续三个点颜色不得相同的要求
所以就很简单了,必须为一条链的形式,枚举前两个点涂的颜色计算最小答案即可,实现大概10min
CF1790F
思考10min,大概只会暴力做法,后面才知道复杂度是正确的.
还有\(O(n log n)\)的做法
下午完成CF2049
前面几道题很简单,前四题花费大概50min
E题思考了大概20min,一开始不知道怎么线性算出每个数与别的数的异或值,后来想到了可以一位一位的考虑,统计出整个数组第i位为1的数的个数,根据当前枚举的数第i位的值分别计算答案
F题一开始想的是先处理出一个大小为k的矩阵然后再粘很多遍,但是发现还是会有相邻的相同的问题,来回改了很久,大概30min
后面重新想了一遍其实就是直接按顺序填就行,但如果m为k的倍数就会有相邻的相同的问题,所以可以奇数行右移一位,错开就行
G题
想了25min左右,双端队列没怎么用过,一开始不会翻转操作,维护正着和倒着两个序列swap即可。算答案那里稍微推了一会,分别记一下答案和当前序列的和就行。
-
250812
上午补了CF2049H,并写了CF2033G
CF2049H
由于l,r较大无法枚举,所以可以枚举约数,比较好实现,大概写了15min
CF2033G
想到暴力枚举向上走几步计算一次询问的答案,设f(u)表示u的子树内最深的点的深度,没有想到用倍增优化。
下午完成CF2037
ABC都比较简单,大概花费30min。
D题思考约25min,题目要求提升的点数最少,一开始看错了,所以可以遍历每个障碍区间,如果跳不过去就选取当前符合位置要求的价值最大的能量点,可用优先队列维护价值大小,实现比较容易,大概花费25min
E题思考30min,每次询问 \([1, i + 1]\),记录当前0的个数和上一个的答案,根据当前和上次的答案之差计算0 / 1 的个数, 大概写了十几分钟
-
250813
上午完成CF2037F, CF2037G, 昨天知道了思路以后实现都比较简单
下午完成CF1986
前三题用时45min,其中B题每个点的答案不会受四周点的影响,因为若当前点能够修改,则四周的点的值比该点都小,所以不会影响答案
D题大概想了25min,看到的第一反应就是有0出现答案就为0,但也有能填的空小于2时的特殊情况。其实不用单独判,每次枚举哪个空空出来不填,特判0和1的情况即可
实现花了点时间,一开始没有考虑 \(\times 1\) 的问题调了一会,大概写了25min
E题思考20min,一开始没想到取模,其实就是按取模后的大小计算每个集合的最小答案,要分个数的奇偶性讨论。
-
250814
上午完成CF1986F,CF1986G, 比较好实现
下午完成CF1980
前三题用时50min,时间有点久,主要是C题对于无法匹配的 \(d_j\) 可以重复覆盖的处理想了一会,写完大概花了30min。
D题计算每个位置对应的b值,预处理出从前往后/从后往前是否能够满足升序,再枚举删除的数判断即可。
写的时候在边界处理的地方调了一会,总共花费30min左右。
E题比较简单,看完题大概想了八分钟,由于每次修改同一行/同一列的数不会改变,想到了记录每个值出现的位置,并遍历整个排列查看是否出现冲突
不过其实不用具体处理如何修改,可以直接将两个矩阵按照行和列排序,判断是否相同即可。
-
250824
上午继续补前面的题,完成CF1980F1, CF1980F2, CF2033G
其中CF1980的两道F题是之前讲过的,按照横坐标或纵坐标排序后单调栈维护,计算新的点产生的答案即可
下午完成CF1974(D)
前三题总共用时45min,比较容易,C题一开始减去重复计算的方案减错了调了一会
D题容易发现x轴和y轴移动互相独立,所以只要两个方向步数相等即可,特判一下特殊情况,大概用了40min
E题看到直接想到01背包,但是发现获得的钱数量太大存不下,可以将状态改为达到幸福值j最多剩下的钱,然后仍然01背包转移即可
-
250825
上午完成昨天的两题CF1974F, CF1974G
最后一题是反悔贪心 都比较好实现 大概花了75min完成
下午完成CF1955(C)
前三题比较容易 大概花了40min左右完成
D题思路很简单 就是计算最开始的m个有多少满足条件的 然后每次后移一个修改答案
但是一开始计算的时候统计合法位置的时候大于小于号弄错了 导致调了很久时间
总共完成时间大概50min 有点长了要再快点 避免这种细节错误
-
250826
上午完成昨天的两题CF1955G, CF1974H
其中G题只需要枚举约束,用bfs/dp校验一下是否可行即可,类似求最大的最大公约数的题大部分做法都为枚举
下午完成CF1941(E)
前四题都比较容易,大约花费100min,其中B题的贪心(是贪心吗 还想了一会
E题看完后很快想到dp算出每一行的最小代价,但一开始没想到如何优化,可以用单调队列,实现不难,总共花费约50min
F题最大化最小答案容易想到二分,然后校验部分也挺好写的,大概用了45min
-
250827
上午完成CF1941F, CF1941G。
F题因为二分校验的时候循环m写成了n调了很久,还有就是longlong的问题,有几个变量少开了
下午完成CF1933(C)
前三题花了40min,C题一开始写的是枚举k结果没有判断指数为0的情况,后面改成枚举a,b了更好写一点。
D题很容易想到没有重复数字的情况,然后剩下的举几个例子也很好分析,想了大概8min,实现很短,总共花费15min左右
E题很明显的二分,求最小的大于0的段,前缀和算出每个跑道的价值。思考约10min,式子推了一会,实现比较容易,大概花费25min
F题由于列是循环移位的,可以将向下和向右的两个操作转化为向右下一格和向下两格,然后bfs即可,大概写了30min
-
250828
上午完成CF1933G
下午完成CF1921(D)
前四题都比较容易,用时45min
E题博弈的讨论想了很久,没想到根据相差行数的奇偶性判断哪方可能赢这一点,然后再根据列来判断是赢还是平局
讨论出一种后另外一种很相似,实现还算容易,总共用时55min
F题是根号分治,在\(d \le sqrt(n)\)时用两遍后缀和,否则直接计算
一开始想到了用后缀和计算,但没有考虑到\(d \ge sqrt(n)\)的情况,总共用时30min
-
250829
补了前面的题目,完成CF1980G,CF1790F1,CF1970F2
第一题前面讲过但有点忘了,回忆了下做法,由异或的性质,对每个点记录前缀异或和,然后根据深度奇偶性分别用两棵字典树来记录异或最大值
后面两道题是模拟,用map记录每个球员的位置,注意细节问题,被携带的球和人要同步,总共用时80min左右
看了CF1921G,思考20min,对于求三角形的前缀和不会计算

浙公网安备 33010602011771号