20260819 - contest 总结

前言

拖欠总结是个好东西。

晚来三十多分钟是个好东西,我不要上 whk 集训啊啊啊,我要训 OI!!

这次按格式写吧喵,那个开始时间结束时间直接去榜单上看就行了,懒得写了,然后后面总结的格式我也会稍微改一点点,有些我觉得不必要的或者觉得莫名其妙的我就不写了。

以及就是我不放代码。

一、比赛基本情况

  • 比赛日期:2026 年 8 月 19 日
  • 比赛时长:3 小时
  • 比赛得分:6 题
  • 比赛排名:第 2 名

二、比赛整体回顾

这场比赛我按照 A、D、B、C、F、E 的顺序做题。

A 是签到题,可惜一开始想复杂了写了一大坨,浪费了一些时间;
D 一眼想到拓扑,正着做行不通,后面发现反图拓扑能完美解决题目需求;
B 原计划在 A 后面做,可惜卡住了,后来从 \(2\) 想到二进制解决了这题;
C 是 gcd 加调和级数,从大到小判断每个数能不能被生成出来,做的还比较快;
F 是线段树题,最开始设计的时候卡了一小会,但后面还是很顺畅的做出来了,也没怎么调;
E 是字典树上 dp,一开始没想到主要是怕 \(O(n^2)\) 会 T,中途把 return 打成 continue 调了十分钟,好在最后还是做出来了。

三、题目复盘

A - Olesya and Rodion

用时 \(6\) min 左右。

考场解题过程

最开始在回忆 \(2,3,5\) 等数的倍数判别法,写了很多分类讨论,最后在判 \(7\) 的倍数时卡住了,最后发现直接输出 \(777\dots7\) 就结束了,于是修改代码并特判 \(10\) 的情况后通过。

本题总结

很签到的签到了,可惜前面大炮打蚊子了一会,还好最后反应回来了。

D - Endless Walk

用时 \(25\)min 左右。

考场解题过程

立刻想到了拓扑排序找环,把没法拓扑到的节点视作能无限移动的节点,但是错了,反应出环后面可能还连着边。中途用错误的 DFS 判环吃了一发罚时,然后回到拓扑做法,发现我们其实就是不要的被要了,要的被不要了,所以反着建图跑拓扑就可以解决问题了。

本题总结

当你发现正着做不行,并且是因为后面有碍事的家伙的时候,不妨反过来看看效果。这也就是所谓的正难则反吧,在图论上也同样适用!

B - Make Almost Equal With Mod

用时 \(6\)min 左右。

考场解题过程

最开始发现用 \(2\) 可以区分好多种情况,但是后面就陷入思考全奇数全偶数怎么解决这样的死循环了;后面发现 \(2\) 不能区分的就是最后一位二进制相等的,那么一位一位二进制判断就可以了。

本题总结

像这种严格控制个数又一定保证有解的,一定要去从小值想起,从特殊值想起,以及在出现 \(2\) 之后一定要想想二进制能不能解决问题。

C - Not Adding

用时 \(12\) min 左右。

考场解题过程

一上来就想到了倒着枚举一个个判断,然后还发现了可以调和级数,但是更新必须是 \(\gcd\) 而非因子均可,所以卡了一小会。接着发现只需要找出所有倍数,求出它们的 \(\gcd\) 判断是否等于当前数即可。

本题总结

遇到公因子什么的一定要想调和级数,然后就是求因子可以转化为找倍数,要熟练于把事情颠倒过来做。

F - Hotel G

用时 \(22\)min 左右。

考场解题过程

区间查询修改,一秒反应线段树,但是前面卡了一下状态设计,有点不知道怎么维护,浪费了一小点时间。后面把线段树的思考模板粘贴过来,一个个梳理清楚了自己的思路,最后很快的写完了代码,也没有犯什么细节错误,总的来说做的还是比较快的。

本题总结

线段树一定要按步骤思考,千万不要没想清楚就开写啊,写了半天发现自己假了最难受了。一定要把自己一团乱麻一样的思路梳理顺了再写代码,这样还能节省调试时间。

E - Spy Syndrome 2

用时 \(55\)min 左右。

考场解题过程

单词列表的匹配和查找让我想到了字典树,但是直接字典树做不了,考虑 dp,想到了可以用 bool 类型的 dp 解决问题。然后发现要找的是后缀,于是决定反着存字符串,最后发现时间复杂度是 \(O(n^2)\),纠结了一小会最后还是写了,因为 \(10^8\) 虽然不太稳但还是能过的。

本题总结

字典树不一定是裸的字典树,在想到 dp 之后也一定要想有什么 trick 或者 DS 能够优化它,以及时间复杂度要不还是默认一秒能跑 \(2 \times 10^8\) 吧,这样浪费时间有点过分。写代码的时候注意每个语句的含义,别把 return 和 continue 写反了。

四、整体反思

做得较好的地方

首先 AK 了。

A 很快就意识到了自己最初思路的复杂所在,没有浪费过多时间;
B 反应出了二进制;
C 较快的想到了调和级数,用找倍数而不是求因子的形式去做;
D 也较快的发现了我们求出来的其实就是要的,所以可以反图做;
F 最终还是梳理了线段树思路后再写的代码;

需要改进的地方

A 不要想复杂了,学太多东西有时候也没那么好的,想清楚再写代码;
B 在最开始想到 \(\bmod 2\) 时没有快速反应到二进制;
C 没有一开始就考虑从另一个角度,找倍数出发去做;
D 没有写完第一次拓扑后就发现反图性质,而是先写了错误的 DFS 浪费时间;
E 最开始在同一个思路打转好几次,最后还对时间复杂度没把握;
F 一开始差点就要没想清楚就写代码了。

时间安排总结

这次的时间安排是:

  • A:\(6\)min;
  • D:\(25\)min;
  • B:\(6\)min;
  • C:\(12\)min;
  • F:\(22\)min;
  • E:\(55\)min。

D 浪费时间较长;E 耗费时间过长,以后思路还是要多梳理多思考,不要怼着一个数据结构不停的想,也要想想其最基础的逻辑(因为数据结构通常都是优化别的什么做法的)。

不过 E 这个时间我不好说了,因为 E 是最后一个做的,所以也没有太多时间压力。D 相对于全场确实算慢的,以后还是不要写一个没把握的算法(中途的错误 DFS)浪费时间了。

后记

我去这个格式,哇。

我的个天哪我根本不习惯用这种标标准准的格式啊我去,我写东西,不管是写文还是写总结还是写题解都没有格式的,我就想到哪写到哪,哔哔叭叭一通乱写,哦,一篇区区文章就出来了。

不过用格式倒是能把赛时的整个逻辑梳理一遍,还是很好玩的哈哈。

这篇文章没有嘎嘎喵味了差评喵。

posted @ 2026-08-27 21:22  嘎嘎喵  阅读(32)  评论(0)    收藏  举报