THUSC 2022 游记
1. 前言
很久没有这种 OI/IOI(即有部分分)的比赛了,这次有机会参加 THUSC(类似 IOI 赛制,当场评测预测试数据,最终的数据与预测试数据仅有随机数种子不同),很期待。
大概是个打酱油的,不过可以通过这次比赛感受一下自己与别人的差距。
2. 赛前
只是看了一些模板,比如树剖、线段树、主席树、最短路(dijkstra
)等。但是最短路并没有自己写一遍。
考前让下载的 OBS 录屏软件挺好的,应该比 EV 录屏强(至少专业一些,有各种录屏选项)。
3. Day1 赛时
一共 道“正常”的题。
首先我把所有题看了一遍,发现 T3 最不可做,叫“通信题”,因为之前没有见过,就跳过了。T1 用到应该是图论和期望(期望一直是我最抵触的东西,一般有关期望的题都不会),但题意似乎很难理解;T2 题面冗长但简化后的题意很好理解,大概是一个 dp 或者小清新数据结构;T4 是树上的数据结构。
由于先看到 T4 了,我就先做 T4。T4 有关树上的链的操作,则大概需要用到树剖。这时我还暗自庆幸复习过树剖。想了一会,没思路,就先去看部分分。我发现:暴力有 分,剩下的一部分用树剖等做法也可以解决。到现在一共可以得到 分。我先打了 分的最基础的暴力,还调了一会,剩下 分难写,打算最后再写。
然后去看 T1。T1 的题目背景写得很有文学色彩,不愧是清华的出题人。读完一遍,发现有两种可能。一种可能特别好做,另一种则很难做。我用好做的那种模拟了一下第一个样例,竟然对了。 我没有看样例解释,便开始写,还确信是对的。
写的过程中,用到了最短路 dijkstra
算法,又庆幸复习了。打的过程中,发现:虽然思路简单,但是不好写。一下就写了 行。写完后去测试样例,竟只有第一个样例对了,剩下三个都错了!我开始怀疑自己是否理解错题了,便想到了那种难做的可能。看了一下第一个样例的解释,发现正好对应难做的可能!此时,我才意识到我读错题了,第一个样例过去是侥幸!
此时我的心态有点崩,尝试提交那份代码,却赶上评测队列很长(需要 分钟)。我又看了一下代码,也许是写挂了,那种理解能得很多分呢!我便发现,原来当时为了测试正确性,数组开小了,而剩下三个样例都是大样例!我加上滚动数组,再次测试了这四个样例,发现竟然前三个样例都过了!我看了一下测试点的特殊性质,发现,我的错误理解正好在那几个点中与正确的理解相同!也就是说我可以用错解得到 分!我没有检查便赶快交了上去。
接下来去看 T2,发现暴力的 分很显然,而如果简单优化一下可以得到另外 分(也就是说我一眼秒了 分)。先写了一个,结果发现不太好写(码力太差),调了半天,不过最终还是写完了。
不知道中间什么时候,告诉 T4 的一个部分分更新了,而更新后那个部分分就是送分的,我赶紧写了一下便交了。
此时,评测队列已经特别长了,大概有一小时,所以我现在 T1,T2,T4 最新的代码都不知道分数,此时心里很忐忑不安。在 T1,T2,T4 之间反复横跳了一会,检查了一下,发现都没什么可改的。
时间过得很快,不知不觉就离比赛结束还有 了,此时想去打 T4 的那两个部分分。犹豫了一会,开始写,发现其中一个特别难写,而另一个不能用系统自带的 set 而必须自己写平衡树,也很难写,我遂放弃了,怕写挂了影响前面的分。
又待了一会,结束了。
4. Day1 赛后
结束的,结束后评测结果才出来,我发现:T1 预料的 分竟挂成了 分(只过了第一个点),不知道为什么; T2 竟然没有挂掉,就是 分;T4 那个送分的部分分竟时间超限了,仔细看,发现自己居然傻到暴力跳 lca
(和暴力的时间复杂度一样)求 x->y
路径的边的个数,而不是用深度相减 求出来!这样的复杂度就退化成暴力了!(是不是当时太忐忑不安了,不知不觉写挂的)
我快速地吃了个饭,发现晚上有 ABC,准备打。打的时候状态十分不好,C 题都写了很久。到了 E 题,发现这道题可以用一个结论转化成最短路(dijkstra
解决)。我开始写,结果写挂了,最终调出来,发现自己的优先队列(priority_queue
)写成普通队列(queue
)了!改后便过了。此时我突然意识到,考场上写的 T1 的最短路是不是也只用了 queue
?!我赶快查了录像,还真是!原来挂分的原因之一是这个问题啊!也许除了这个问题,还会挂分,甚至部分分思路是假的,但这种问题犯了就没戏了啊!
此时,Day1 的估分变成了 。
去问了一起参加的两个初二学长,分数都比我高多了,看来我 Day1 挂分挂得有点惨(虽然实力也与他们有巨大差距)。
5. Day2 赛时
之前听说 Day2 都是工程题,也就是“码农题”,大模拟一类的。题目的特点是:会下发一些网上的学习资料,而我们写的程序也要参考学习资料(考察选手的学习能力)。这对我来说是一个挑战也是一个锻炼的机会。在今年省选上,Day1 T1 大模拟写挂变成 分,是个遗憾。赛后给 hjl VP,结果他 1h 就一遍过了。这也更加让我对我的码力不自信了。不过这题的 道题总分只有 分,与 Day1(每道题 分)有巨大区别。
首先看到 T1,发现要编写一个解析 html 网页代码的程序。简单分析后,发现这是一道送分题,便写了。写完提交上去,发现提交很顺畅,但在第 个点错了。我没有赶紧调,而是去做其他题了,因为不值得对和 分花大量时间。
此时,我对这些题的估计仍旧是:剩下题都是很难的题,只要能做出来一点便是好事。
看到 T2,发现题面冗长,便跳过看 T3。T3 的题面很简洁,可是重头戏在学习资料里:学习资料中全都是一堆公式。我经过简单的分析,发现,只要我们在输入的东西中提取出公式里需要的参数,并算出公式的值,便是答案。我将每一个参数的求法都一一列到了草稿纸上,理清思路后,便开始写代码。写完代码后,发现与答案的输出不同。经过一些比对后,发现程序中的一个公式与学习资料的公式不同,改过来就对了。交上去果然全对了。
接下来看 T4。T4 仍然需要参考学习资料。不过这次学习资料只有一个公式,我研究了一会理解了公式,便开始写。写出来代码,样例的输出却很离谱。学习资料明明说这个东西是收敛的,但我的程序的输出却是发散的。我认为我应该是理解错了公式。此时,我突然想到,有两个学习资料,我可以结合另一个理解啊!我点开第二个学习资料,里面模拟了一个情况,果然我的理解错了。按照正确的公式改完后便过了样例,提交后也是不出意外的对了。
过了 T4 后看 T5,发现题面完全不能理解。学习资料有三个,写得也不能理解。我便回去看 T2。我发现,T2 题面已经说明了要干什么,不需要学习资料,而做法便是直接同时进行多个 dfs
。使用栈维护即可。写完后,竟然没有调试,直接过了样例,提交后过了。
此时,我再回去看 T1 为何在第三个测试点错了。我注意到了三种需要忽略的情况:script,style,img
。如果在 script
里放进一个 style
,则我的程序便会出错。我发现,我的程序完全不能特判这种情况!冷静下来,我回顾了一下题面,发现我刚刚说的那种情况压根不存在。这又使我放下了心。大概是数据造错了吧!我便不打算继续调下去了。
剩下的一点时间,去看 T5 但还是读不懂。从那时到比赛结束,一直没有新的进展了。
6. Day2 赛后
赛后听讲题,得知 Day2 T1 的第三个预测试数据就是错的,最终的数据不会出现那种情况。所以我大概能对 Day2 的前四题。
7. 总结
这次比赛我相对来说 Day1 发挥不好而 Day2 发挥挺好。
Day1 的主要问题是把大部分时间浪费在 T1 上,而 T1 读错题了。最短路写挂也是不应该的。
其次的问题是 T4 的那个送分的部分分居然忘了复杂度这回事,直接暴力跳的。
需要改进的地方概括起来:
-
认真读题,认真读样例,完全搞懂样例。
-
考前复习好模板,最好打一遍,不要出现会的模板打挂这种白送的事。
-
思路要清晰,不能出现打一个代码与暴力对拍,拍出来一个错,打一个补丁,接着又能拍出来,又打一个补丁,直到放弃。(指 Day1 T2,不过好在最后调出来了)
-
需要在概率与期望上深入学习。
不过其实在 Day2 发挥的还是挺好的,弱项的大模拟居然能写出来 4 题。
感觉这次因为 Day2 的缘故涨了一些信心。
不要对自己没有信心,在意识到自己一些地方薄弱的情况下,也要发现自己的长处。
8. 题外话
- D1T1 的倒霉事:首先读错题了,然后按照读错的理解模拟样例还算错数了,结果正好对上了,然后按照自己理解瞎写了一份代码。写错了一个地方,却凑巧样例还对了,交上去还得了 15 分。赛后改题,去 infOJ 交,调了几个 bug 后还只能得 10 分,与 xuanxuan001 的正解对拍死活拍不出来。尝试修改对拍的造数据程序(造出来的数据不符合题意),结果一下就拍出来了。在 infOJ 上 assert 了一下发现那里的数据也有这个问题。 upd: 数据修好了,改之后 40 分了。
9. upd
- D2T4 的代码完全是错的,因为完全理解错题意了。可是因为 pretest 数据太水了,就直接过了 pretest。在 infOJ 上 25 分。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】