第一次写游记。
前言 & 个人评价
GDOI2022 普及组:干两天,每天干 3.5h,下午讲解。
我感觉这次比赛好难哇(当然是因为我太蒟蒻了),题目大概分三种:
-
过度简单题
-
困难思维题
-
大模拟(啊啊啊啊啊啊啊啊啊啊啊啊x1)
出题人声称:
这次比赛更偏向思维(没错过度偏向思维)。
比 CSP-J 难一点(实际是难亿点)。
考试也没有规定不能出大模拟,所以这是合情合理的。(无话可说)
尽管如此,我还是相对满意的,因为基本没有挂分(注意基本二字,这说明还是挂了分)。
吐槽:没有大样例!我没法检查!啊啊啊啊啊啊啊啊啊啊啊啊x2
Day -1
刷线段树的题。
然而普及组不考线段树,所以等于没刷题,不过练手感的作用还是有的。
Day 0
干数学题。
Day 1.0
解压包密码:hope to see you soon
提前几分钟打完 freopen()
等文件,基本是准时开始做题。
T1 大淼,\(O(n^2)\) 的无脑写法都能过去,但我还是写了个 \(O(n)\) 的。
十分钟左右过掉。
T2 有点难,最最朴素的暴力 \(O(2^n \times n!)\) 一个点都过不去,赶紧放弃。
T3 是树,感觉有希望,但为了保险,先去看 T4。
T4 发现暴力 dfs()
能打,大概打了 10-20min 搞定。
再思考了一小会,还是没什么思路,就跳去 T3 想题。
T3 耗费了我很长时间,打了 1h 左右的暴力,预计 20pts。
还有 1.5-2h 左右的时间呢,不急,就重新返回 T1 打了个暴力简单对拍了一下。
T2 又想了很久,10min 左右后仍然没思路,T4 同样道理,只好给 dfs()
卡常。
又回到 T3 了,我额外手造了一点数据,好像没问题,就又过掉了。
* 这里是整场比赛最需要反思的地方,因为耗费最长时间打的题目,爆掉就非常惨,后面还会说。
再翻了一遍 T2(注意,T2 我没有任何骗分方法),认为是有机会想出来的,第六感告诉我,代码不长,有机会!!!说这个有屁用啊最后不还是没打出来
感觉都做得差不多了,可考试还剩 1h 呢,闲来无事用 5min 左右加了下快读,并给所有程序都卡了一遍常数(比如,函数前加 inline
)。
接下来还能有什么做?思考呗。
这段时间没有任何进展,过程自己也忘掉了。
吸取 CSP-J 的悲惨经验,我仔细检查了所有 freopen()
。
还有 10-30min,我突然发现 T2 无解输出 \(-1\),于是赶紧骗点分。
为了避免 T2 浪费掉,我又自己猜了几种特殊数据,并特判一下。
再然后又双叒叕检查了 freopen()
。因为实在没事做了(放弃
预计得分:\(100 + [0, 10] + [20, 60] + 20 = [140, 190]\)。
实际得分:\(100 + 5 + \color{red}{0}\) \(+\space 20 = 125\)。
呜呜呜,T3 挂成 0pts 了,到现在我还不知道为什么挂了。
Day 1.5
听讲解。
T1 略。
T2 懂了,代码的确很简单,不过这也太难想了吧。第六感正确
T3 不懂。
T4 要微积分,恶心,不懂。
Day 1.8
好好反思了一下,决定根据讲解中的方法进行做题。
每一档分都是有关联的,部分分可以引导你做出正解。
Day 2.0
解压包密码:always wear a mask
T1 是《点 指 兵 兵 点 到 谁 人 做 大 兵》,还挺好玩的(bushi
不淼了,说正题。
T1 一下子就想到了 \(O(T \times n)\) 的解法,10min 内轻松拿到 80pts。
但是 Day2T1 没有 Day1T1 顺利,稍微想了 3min 没有正解的思路。
看T2,显然可以转换成树问题。
我暴力竟然不会打,无奈之下 5-10min 打了两个 special-subtask,20pts 的分数还是可观的。
瞄了一眼 T3 就崩溃:这是 \(\huge \text{大模拟}\) 啊!
怕没时间做,决定只做前几个测试点。
与 Day1 策略一样,我先看 T4。
T4 不就是 dfs()
吗?好像是耶,貌似可以通过此题。
打了 2-5min,突然看到一行字:
为了增加考试的难度,俱乐部提供的机器人的信号接收器都存在问题。
换言之,对于小纯给出的每一条指令,机器人有可能接收到指令并执行,也有可能接收不到指令并保持不动。
突然就明白 dfs()
是不可能淼 T4 的对吧。
啊啊啊啊啊啊啊啊啊啊啊啊x3
然后思考了 1-10s,我想还是可以打 dfs()
的对吧,\(O(2^n)\) 可以过第一档分。
于是打了 30min 代码(不愧是 T4,暴力都要打这么久),终于打完了 10pts 的分。
至此,第一波打完,还剩 2h 有余,我决定尝试 A 掉 T1。
诶,根据 special-subtask 还真被我想到了正解!!!
看见了吧,Day1.9 的反思还是有用的。
T1 20min 多才打完,时间复杂度 \(O(T \times \sqrt{n} \times k)\),\(k\) 较大时,是 \([3000, ?]\) 的一个常数。
因为常数有点大,我输了一下 \(n\) 的最大值 \(2 \times 10^9\),好像挺好的。
不知道算法正确性怎么样(因为反向去重没练过),所以弄出之前的暴力,依次对拍 \(n = [1, 10^6]\) 的数,都没出错,还是很高兴的。
啊,时间还有 1-1.3h,怎么办?
我竟愚蠢地选择了思考 T2 而不是打 T3 部分分。不过这关系不大,事实证明我完全有时间先打 T2 后打 T3。
啊哈,手玩了几组自己造的鬼畜数据,发现一个 dfs()
的 \(O(n)\) 做法,应该是没问题的。然而我不会证明QAQ
我 5-10min 就写完了,由于暴力太难写,我无法验证程序正确性,只能听天由命啦!你个 GDOI 不给大样例烦死了
还剩 1h,用很长的时间给大模拟手打了个表,然后把前两档最简单的分拿了。
剩下的时间,检查一遍所有程序的 freopen()
,然后思考 T4 最终没有其他进展了。
预计得分:\(100 + 100 + 10 + 10 = 220\)
实际得分:\(100 + 100 + 10 + 10 = 220\)
欧耶!没挂分!
Day 2.5
T1 做法和我大致相同,不过我没用 unique()
去重而是手动去重,吃了点亏,还好时间复杂度相同。
T2 的证明懂了。
T3 大模拟懂了,前缀和竟然可以 \(O(1)\) 过。
T4 正解 dijkstra 我是真没想到。大致懂了(毕竟我会堆优化+链式前向星dij)。
尾声
总分:\(125 + 220 = 345\) 这分数其实挺低的,一堆 dalao 六百多分。
不过实力基本(又是这个词!)都发挥出来了,所以并不觉得遗憾,特别是 Day2。
还没公布排名,等公布了就加进来吧。
首发:2022-04-20 22:55:06