「DIARY」NOI2021 小结

这篇就主要说一下个人感悟吧,虽然不是金牌选手,但还是希望多多少少能对后来者提供些帮助

1. 预备

省选到 NOI 的准备,就当讲讲故事。

省选考下来好像不是很行,本来退役记都写了一半了,结果发现省队最后一名苟进去了 awa 随后就是抛开一切准备 NOI。省选联考固然难,但做过 NOI2020 的线上赛,也知道 NOI 和省选毕竟不是同一个等级的,做足了心理准备。

与其他竞赛强校联合训练是准备 NOI 的主要方式,也就是一起打比赛,分享试题。省选时两天一次测试,现在几乎每天都考,训练强度直接翻了倍。每天上午打比赛,下午晚上补题;题目难度要向 NOI 靠拢,补题的难度不言而喻,基本上一天也就耗在了补题上。再像以前那样写长篇大论的博客总结试题是不现实的,所幸自己一直保留着「刷题记录」这种东西,记录每道题的主要算法,再对这道题根据自己的收获给出一个价值(是否需要复习、重做,或者重温思路);实际上到训练后期这种记录就足够了。

知道进入省队的消息后没过多久就去北京集训,这是我第二次长时间外培。其实外培和平时的训练区别就是“有一群人和你一起考试”,的确人多一些更有考场的感觉。到了外地,作息时间可能有 1h 左右的调整,需要先适应;不过更重要的还是适应考试环境。实话实说,外培讲课的效果其实并不比线上视频好,人太多根本不方便提问;一些人的解法可能和 std 不同,值得一听,虽然大多数时候是半懂的状态,但是至少还是要在脑海中留下一个印象——这道题可以这样分析。

做比赛碰到的算法大多数是学过的,就当是复习。能写的题就写,其实也是复习一些模板(在之后敲模板题的时候有些算法就可以 skip 了)。

偶尔也会碰到没学过的算法,听评讲肯定是听不懂的,还好有 OI-wiki 以及其他博客。到 NOI 的阶段,发现有一整块知识缺失是不可能的,多数没见过的算法都是一小点;如果没有冲金牌的目标的话,这种算法就把比赛题补了就合适了,再拓展练习的话,一是大概率不会碰到,二是很难把握算法精髓,NOI 肯定不会考板子,即使碰到也不容易想到正解。

教练有时会让我们研究一些论文,同样的道理,不需要大规模练习。

2. 练习赛

本来想在前文就顺带说了的,但是看起来得单列一节。

练习赛不仅是做题,还要练策略。练习赛需要重视,但是毕竟不是正式比赛,可以拿来做实验( ̄︶ ̄),比如听说一种策略是「拼了命也要做出第一题」,可以试一试然后死得很惨

练习赛是模拟正式赛,但有一说一,和 NOI 差别肯定很大。NOI 试题有一个共同点是测试点分得特别细,练习题就很难有很细的部分分,而且还绑点╰(‵□′)╯。考下来分数肯定会集群,所以练习赛比较考验某一个思路的突破,以及实现的精细。不管怎么练,始终记住正式比赛啥都不会写的时候「部分分+乱搞」yyds。

多校联训总共六十多场比赛,越到后期越难,如果状态不佳,连续几场考爆是常有的事。听到家长说「看你们这些竞赛生都已经考麻木了」,实际上只有外人会这样认为。最后十场练习赛连续爆炸,每次考完看到自己的分数,觉得「可能就这样了,无所谓了」;但是中午躺在床上脑子里就只剩「真的无所谓了吗?凭什么我学了这么久,凭什么我都冲进省队了,还是考得这么差?」;摔东西、砸墙、长跑……独自一人发泄一通,似乎又好了,告诉自己「明天一定要 200+,再拿一次 rank1」。自言自语在人群中不太好意思,但一个人的时候久不必要隐瞒了。每次自己从「期望后的失望」中回复过来的时候就会想起一首歌:

给我 点时间就好

让我 安静地坠落

请不要担心我

并不需要太久

然后装作

没发生过

——《难过 233 秒》

大概就是这样吧。

终于在最后一次练习赛时,整个人放开了,啥都不管放开了考,得到了自己满意的名次。

3. 临考

NOI 就跟个夏令营一样,任务安排特别宽松,给了选手特别特别多的时间。

NOI 临考的时候最烦的是「不知道要干什么」,但是必须要找到事干,个人觉得劳逸结合是比较好的选择。

考前不需要太压抑自己,尤其是到了宿舍过后,一个人一直复习往往会把寝室弄得特别紧张,所谓内卷(´Д`)。喜欢玩游戏就玩,喜欢打牌就打,喜欢唱歌就唱(不要扰民⊙﹏⊙∥),只是每次 NOI 都把体育馆给占了,打球之类的基本上不太可能,而且夏天比较热。(这次 CCF 报道厅把乒乓球馆占了(ノ`Д)ノ)

有句话说的好:「劳逸结合是不错,但也别放松过头」[doge] 适当地卷有助于保持自己的状态。我复习主要是看自己的博客,还有把刷题记录挨个看,主要复习思路。NOI 不太可能撞题,所以复习重点在「怎样找到这道题的切入点」或者一些实现细节。

另外住在寝室里有个好处……如果是一个比较活泼的寝室(o゜▽゜)o,室友可能会在 Ta 发现某个神奇算法/思路的时候发出惊叹 awa 虽然嘴上说着「NOI 要是考这个算法,我 ***」实际上很有可能一奶一个准_(:з)∠)_

4. 考试

考前啥都不想,唱首歌就上路 awa

不管 CCF 又出什么幺蛾子导致比赛延时,反正比赛都是 5h。开考后先通览题,只要没有去年 NOI2020 Day2T2 那种玩意,差不多十几分钟就能了解大概题意。此外注意数据规模。

然后不管哪道题比较有思路,反正按顺序做,不会做就写部分分。NOI 大概是按难度排序的,所以留给前面的题的时间还是得多些。T1 如果能想出来,思考+写代码 2h 对于一个银牌选手并不过分;如果没啥思路,顶多 1h 过后必须写代码,能写多少写多少;2h 没调试出来,先保存着放一放,换 T2。T2 的策略和 T1 差不多,只是思考时间可以缩短一些,一定要给 T3 一些时间,哪怕是写暴力也可能花费一些时间。

至于 T3,还是那句话,如果不是冲金牌,开局就看部分分。考前学会了一个看部分分的方法——分栏看。T3 的部分分往往是把每个测试数据的信息挨个列出来,表格长得离谱(。_。),但是可以看它每一列的特殊性,比如一些点的 \(n\) 很小,一些点的 \(k\) 很小,一些点有特殊性质……

写完 T3,如果 T1 没写出来,现在就可以打回马枪了(反正我 Day1 就这么干的)。调试的时候如果没有合适的大样例就写对拍吧!比干瞪眼强多了。

考试结束前 15min,代码一存,检查:

  1. 文件目录,文件名,文件输入输出;如果你不确定代码放的位置,可以问工作人员;

  2. 数据规模,包括数组的大小和数据类型(long long);

  3. 编译:O2 和 C++11 开和不开都要测一测,应该以后都会开 C++11 但还是要看清楚;编译完测文件大小,MLE 和 CE 一样惨;开所有你记得的编译警告,尽管网上说只开 -Wall 就够了,但是似乎有些东西比如 -Wconversion 就需要单独开;

    除了开了 O2 警告你 scanf/printf/freopen 的返回值没使用这种屑警告,其他警告都要重视,尤其是:

    • 隐式类型转换;
    • void 函数可能木有返回值;
    • 位运算的顺序;
    • 变量重名(养成好习惯( ̄▽ ̄)")。
  4. 用文件输入输出测样例,eg:

    cd qi
    g++ -o qi qi.cpp -std=c++11 -O2 -Wall -Wextra -Wconversion -Wshadow
    cp qi1.in qi.in
    ./qi
    diff qi.out qi1.ans -w
    
  5. 检查代码里是不是还输出了中间变量,建议用 fprintf(stderr, "")/cerr 输出中间结果,最后直接搜索 fprintf/cerr 删掉就行了;

  6. 删掉代码里所有 assert,尽管你觉得只要 assert 挂了就会错,但是如果加了 assert 就肯定没戏,删了过后可能会出奇迹o(* ̄︶ ̄*)o

5. 结语

作为一个 OIer 的学习生活已经结束了,也仅能以一个退役学长的身份和后来者交流了。

自己瞎编了六个字送给现役或有意参赛的人:『慎始,笃行,善终』。

上一篇:零售价格分析及利润最优推导


下一篇:2021.07.17-多车轨迹优化-实践