THUWC 2025 游记
虽然说是游记,但其实还会记录很多东西,比如训练的内容。
本文下标以 0 开始,即 Day 0 指的是 2025.1.13。
另:我发现是不是因为我的游记前面内容太多所以没有人点赞啊/dk 大家点个赞满足一下我的虚荣心吧/ww
Day -11
晚上一放学拿到手机就得知可以查结果了。虽然之前已经觉得自己进的概率挺大的,但是打开界面的时候还是很忐忑。发现自己可以去了之后就非常开心了。
是人生第一次参加校营啊。不知道我的 OI 生涯还剩多久,不过这一次至少续上了十天的命。
但是无论如何能够翘掉期末考试还是很开心的!毕竟我之前几次考试都没有能发挥得特别好。
这次能去 THUWC 也是得亏 NOIp 保住了下限。CSP 真的打得太烂了所以去不了 WC,现在至少还能去一次 THUWC,也差不多吧。
所以我点了个疯狂星期四/zhq
Day -10
正式开始停课训啦。不用复习文化课还是很爽的。
今天先训一下之前的 THUWC 真题,感受一下题目的风格。
1. THUWC 2024 T1(的一部分)
首先,我们发现至多会选择
这段先鸽了。我们接着训 AtCoder 的题目吧。
2. ABC163E(*2037)
这个题的第一步关键在于想到这个贪心策略。我们考虑先把序列从大到小排序,依次填入新的序列中。可以先不把贪心策略完全确定,发现我们要填到的地方一定是当前新序列两端中的一个。然后考虑设
再训一个 *2000 就加点难度吧。
3. ABC350G(*2058)
这题很简单,做法都属于比较暴力而直接的类型。
根号分治
我们一开始认为可以 bitset 暴力冲对吧。但是你发现这个空间怎么是 256 MB,那就得爆了。但是注意到总度数是
暴力根号
很经典的结论和做法。我们对于询问直接暴力做:先判断是否在同一连通块,这是为了方便记忆化;然后我们找到
不过,这个做法比较依赖本题的很多性质,而且太典了,所以没啥意思。
启发式合并
这个做法的难点就在于你要想到这个算法。但是你又发现这个题目的模型真的非常 merge,所以其实没啥难度。那么我们考虑到如果存在一个点
根号重构
没啥意思。不想写了。
3. AGC014D(*2266)
发现自己几乎不会博弈论,这下这下了。还是多补一补这种能补的算法和内容吧。
这个题真的在我这种没见过什么 games 相关的题的人看来相当神仙啊。首先我们显然是不可能直接想到完美匹配的,但是可以逐步地通过观察样例来做,可以发现如果存在一个点,拥有至少两个叶子结点,那么如果先手染上它,后手必败;那我们接着考虑,判掉这一种情况之后,就会出现一些链。发现删掉这些链是不影响结果的,当然必须两个两个删。然后如果删光了那就没了;否则,如果删到了某个结点,那么它的儿子一定都是叶子结点,便可以继续按照这个思路进行判断。
但是貌似这个结论不够方便。我们考虑一个结点的每个儿子,能对它起作用当且仅当它的大小为奇数。这是因为如果是偶数的话,显然一棵树要么是有办法被删光的(完美匹配);否则,这棵子树已经可以使得后手必败了。就非常简单了,只需要判断每个结点是否有
思路有点 chaos,但是整体来说这种题目这么做其实很舒服啊(
4. AGC004D(*2346)
其实你想明白这个题目的要求之后就非常简单了啊。
我们发现,
5. AGC013C(*2462)
这道题目我们可以先考虑链上的情况。于是发现每个点最终的相对顺序不会变化;可以假设当两个点相遇时,互相穿过了对方,只是交换了编号。那对于这个弱化版我们就做完了,这也是这道题目的一个非常精妙的地方。
但是如果是环上的话,我们无法确定
统计这一点看起来非常困难,但是其实我们已经做完了这道题目最困难的部分。我们观察到并不需要考虑是哪个点穿过的,而且每个点以同一个方向只会穿过
然后这个时候发现自己去不了 P 营,虽然原本也没想去来着。。不过下个赛季不能打得那么差了。
Day -9
今天上午看了眼 THUWC 2024 的工程题,感觉人机对抗很牛啊。不知道该咋训练这种东西的。还是先练 Day 1 的内容吧。
6. AGC002D(*2514)
又是很多做法的典题。
整体二分
我更喜欢整体二分这种做法。我们首先考虑对于单次询问的二分,如何 check?发现可以对于当前可以走的边用并查集全部连起来,然后看
Kruskal 重构树
咕咕咕
Day -8
昨天咋这么摆?颓了 5h,CF 和 AT 都下大分。
真的清晰认识到自己手感还是很差,必须抓紧复建。
我们 vp 一场远古 ABC 吧。
ABC237
ABCD 一共吃了两发/yun/fad
E
这个题我一开始就无脑莽了个 dijkstra。。后来才发现没法这么做,SPFA 赛后被叉掉了。只能转化题意中的边权了。首先我一开始的思路是,既然题目中要求的是最长路(最大值),我们可以全部取反得到最小值,求的就是最短路。但是这个时候发现有负权边,考虑可以给每条边加上一些东西使得权值非负。但是这个时候我们加的东西必须存在一定性质(就是可求),否则没法在最后减掉它们。
我们注意到边权为负时,都是
这道题目确实很好玩啊。但是其实关键还是思路的引导性问题。
F
这看起来像是个 dp 套 dp,但是我不太会的。
考虑怎么求一个序列的 LIS?似乎有很多做法。
-
正常来说我们的
O(n^2) 做法是枚举上一个位置在哪里。但是这么做状态数显然太大了; -
还有一个做法是
O(nV) 的,即转置记录的内容,对于每个前驱值记录 LIS,但是尽管本题中值域只有10 ,也仍然无法承受3^{10} 的状态数。(其实没准能做,但是显然不是一个令人舒服的做法) -
最后就是一个
O(nk) 的做法,其中k 是答案的值域,在本题中为3 。我们记录每种答案的对应的最小末尾值进行转移。于是,在本题中,要记录的就是10^3 的可以接受的状态数了。
我们于是设
写的时候有一点技巧就是可以把还没有答案的位置设为
G
这个 P2824 之前做过的。。但是第一眼又没看出来。
你考虑区间排序操作还是太复杂了。考虑把
Day -7
还有一周了。从今天开始不可以再颓废了。
早上先玩一场 ABC 236 吧。
ABC236F
好玩的线性基,是板板题。
当然还有一个不需要线性基的思路是,我们考虑至多选
ABC236G
这个所谓恰好
哎哟,这个判断不是很明显吗??你肯定是考虑倍增做这个东西。
- 倍增
设
现在考虑怎么把
- 矩阵快速幂
一直没学会这个东西/ll 但其实挺简单的。
我们想到一个最暴力的 dp 转移方程:设
复杂度也是
ABC236Ex
这个题也过于抽象了吧。其实每一步都没啥难度的,就是你得想到这一步。呃呃感觉是属于那种多练就会的题目。是不是我 NOIp 前多练这种题就可以 332 了啊?
但是这个题做不动了。先做会我存的陈年旧题吧,来源是【数据删除】,只挑有原题或者题意简单的写一写。
P6534
*2300
这个题首先你得把 dp 思路弄清楚。如果设
现在,我们证明了 dp 状态的可行性,考虑如何转移。实质上要考虑的就是如何把儿子结点的合法区间拼在已有的合法区间的边上。我们先考虑更新
P3070
*1900
看到
所以这么简单的题为啥我前年不会做?
Day -6
【未知题号 1】
求逆序对数
\leq k 的长为n 的排列有多少。n,k\leq 2000 。*2200
首先一眼是 dp。设
我们考虑怎么转移。当决定第
我们可以脑补一下这个离散化的过程,把前
相当于,我们每一步插入一个数都只确定大小关系而非具体数值,这样到最后就自然获得了具体数值,而不会影响最终结果的方案数。
于是,我们可以直接把前
然后我们再枚举一下之前有多少逆序对,这样就是
这个 trick 挺不错的啊。对于解决排列方案数状物确实需要很多特殊性质才好做。
HDU 6078
*2400
首先我们的暴力优化可以通过树状数组做到
我们发现这玩意和 LCIS 其实是本质相同的。转换思路,设
HDU 4980
*2800
好玩的树形 dp。首先你考虑把这个题的模型抽象出来,就是用若干路径覆盖整棵树,看起来还挺经典的嘛。
然后我们考虑 dp 过程中,对于结点
-
这棵子树没有延伸出来的路径,但是由于通向它的那条边必须被走一遍,所以也算作有一条路径;
-
这棵子树只有有延伸出来的路径,但是和其它子树的并在一起了,也就是说没有离开
x 子树的范围; -
这棵子树有延伸出来的路径且越过了
x 。
我们考虑设
那么我们考虑要做的就是让每棵子树的贡献信息进行匹配,要求剩下的
唉但是这个题写的时候太唐了。我在中间状态 dp 的时候不仅额外开了个数组但其实本来可以滚动的,还开了双倍的状态用以表示是否有待匹配的。但其实你发现这个匹配的过程完全可以不用状态体现而在转移过程中直接给它做完。
也就是说,我们 dp 转移只需要枚举三维:之前待匹配的部分
至于子树没有上传路径而只有一条出边待匹配的情况也非常好处理。我们可以在初始化 dp 数组的时候就允许
怎么会有这么自然的转移思路啊。我之前写的那个玩意是啥啊真是,过于复杂且不优美了。
Day -5
越来越摆了。
vp ABC 235。B 居然吃了发罚时??
ABC235D
这个简单题给我干蒙了。最后莽了个 dijkstra 还 RE 了一发。
ABC235E
一开始读错题目了啊。不过还是很简单的题目。
ABC235F
这个数位 dp 其实很简单,不知道怎么打到 *2129 的,可能是外国人都没有系统性训练过吧。
ABC235G
萌萌组合数学。
那我们还是考虑容斥,首先如果可以放空盒子,那么总方案数就是
但是这个直接算是
如果我们设
这部分推导也启示我们通过对组合式的变形和递推式的应用来构造新的递推方程。
那么根据这个玩意我们就可以先
P7635
插播一个简单题,我觉得做题思路需要记录一下,但是实际难度可能只有 *1800。
我们考虑直接枚举或者二分都是没道理的,考虑刻画一下最终的结果,发现满足单调性的其实是前
ABC235Ex
突然发现自己怎么上一场的 Ex 还没补啊。咕咕咕。
这场怎么两个树形 dp 啊?没素质。
*2967,好难
首先跑一遍最小生成树是 trival 的,很明显不会影响最终结果。然后我就不会了。
Day -4
摆烂一整天。在此不表。
但是欢迎大家游玩 SCP:SL 谢谢喵!
Day -3
摆烂大半天。中午 vp 了一波,晚上来补题。
ABC234F
*1596,简单题
其实这个题场切了,但是还是很想写一下。额首先我们发现子序列没啥用,所以关键的东西只在于每个字符有多少个。然后就能 dp 了,预处理一下阶乘,根据经典结论做就好了,复杂度
ABC234G
*2306
这种题做不出来是不是可以去死了?我居然又去想那个板子的线段树优化 dp 题了。真是够了。
首先我们考虑拆贡献,把答案当成最大值 - 最小值。然后这个题的贡献形式是求和,所以不用线段树维护的。我们考虑算最大值的贡献,设
我们考虑到每个位置的
这样就做完了,时间复杂度
这个题给我的一种启发就是,对于这种细节多的题目一定要屏去杂念和没有必要的部分,尽量减少需要考虑的细节,规约类似的部分,避免出错。例如这个题我们要分别地维护 max 和 min 贡献的前缀和,但是发现只需要记录单调栈需要的那一部分就可以了。
ABC234Ex
*2505
人类智慧题!我写了好久的乱搞但其实都没啥技术含量,只能过一半的 cases。但是随机旋转就能过了。
考虑一下正解。
平面分块
把整个平面划分成
推导一下
我们考虑这个式子
分治
经典做法。我们只统计跨过区间中线的点对,显然不重不漏(虽然不重在本题没啥意义)。我们把
(补)ABC236Ex
235Ex 暂时不补了,因为暂时不想学新的东西啊。然后就认真学习了一下容斥原理。
那我们考虑原答案就相当于,有
考虑如何求
补不动了。实力不够。
Day -2
又摆了一天。啥也没干。
Day -1
最后 vp 一场 ABC233 吧。然后就稍微补补题吧。
ABC233F
*2038
判无解是简单的,把连通块找出来看看其中现有的值是否匹配。然后我们考虑怎么操作比较合适。
如果我们对于每个位置
但是写假了!我忽视了一件事情,就是每次暴力交换是有后效性的。然后我们根据题解的思路在这个基础上进行优化,再通过随机化优化操作次数。
但是最后没调出来。难过了。
但是我们可以口胡一下另外的做法。
首先我们发现一件事情,就是对于每个连通块而言我们要做的其实就是排序。考虑做完并查集之后把这棵树建出来(其实就是把后面的边给去掉,容易发现不影响结果),然后我们考虑对于森林的每棵树,跑一遍 DFS,目的是对其进行排序:先对于每个结点的各个子树进行一遍排序,最后把当前结点的数交换到合法位置去。然后我们就会惊奇地发现,最后一步的交换操作本身并不会影响单调性。于是就对了。
这个做法本质上是充分利用了树的结构的特点,以及我们最终序列的单调性。
ABC233G
*2438
相当经典的题目啊。我们显然要先考虑 dp,设
首先我们知道一个
ABC233Ex
*2530
不补了。没时间了。
Day 0
上午高铁睡大觉。
下午到 rdfz 报到了。年度新梗:我是 q-z!排了一个半小时的队才报到完,腿都快要站断了。在这期间面到了 i 宝,可爱捏。
然后就是试机。我比较弱智然后跑出校门去找高中楼。。然后最后试机就写了 200,T2 还 WA 了一发?攒 rp 了属于是。
然后去麦当劳面。结果最后来了一车的人,但是我社恐发作只能低着头对着手机看/ll 不过也换了一些徽章,还白送给了几个老哥。大家都好可爱!
然后打了把 uno,在外面合完影就被父母拉走了,没赶上徽章合影/dk
晚上吃了北京烤鸭。到宾馆也不想干啥了,再看去年的题感觉意义也不大?就看会电视睡觉吧。
希望可以考好一点。
在这里写一下 Day 1 的考试策略吧。这些内容都是依据历年的题目平均难度写的,所以不能犯下本本主义的错误。
首先一般认为只有 T1 是值得冲正解的题目。后面三道题可能有可做题,但是不要莽撞。由于 THUWC 题目的部分分一般只有最多四五档,而且很多题都是捆绑了子任务,所以需要考虑的乱搞不多。而且由于是 NOI Pretest 赛制,五十次提交基本上相当于
Day 1
这是 Day 2 写的。
反正很输吧。本来 T1 T2 都有机会做出来的。结果 T1 这么典的题目还是没想到点子上去。
感觉整体上就是一个做题思路不够流畅的问题,可能不只是不熟练,还有就是做题的时候不太会把握做法的方向和正确性,这一点本来可以更好的。
Day 1.5
嘉年华。在地下绕圈子。回宾馆。
Day 2
上午真是赤石了。这个题面真的太逆天了。
Codeblocks 的编译器坏了,所以只能直接提交测。前五个题做了 2 h,本来以为还不错,结果由于对于线性代数和矩阵乘法太不熟练,所以 T6 瞪眼 1.5 h 才看出个大概,一直就是卡在一个矩阵形状的问题上,没想明白怎么乘上去的。然后写完也没调出来。
然后就成功地被翻出了 Au。成为了高贵的 Ag 选手。
这里要恭喜 gza,颁奖的时候和他坐在一起,肉眼可见的非常开心。真的好可爱/tiao
不过是不是也不错了()毕竟一半多的人都没有奖拿来着。
然后就是 THUSC 2025 努力吧。不过在此之前的省选,我还没想好目标是什么,也没想好该怎么准备。无论如何,时间不多了。