平时练习端正心态,练习就是考试,考试就是练习

赛前准备
    赛前认真检查准备好各种证件,疫情期间不要忘记戴口罩,确认好前往自己考场的路线,同一个学校的学生也不一定在一个地方考试,例如江苏复赛考点在南航将军路校区,但是比赛机房分在两处相隔较远,经常有考生因不熟悉路线,一路疾跑至考场,进考场后不停擦汗,变得更加紧张比赛状态受到一定影响,看好时间提前去考场。
    比赛前两天就不要再学新算法了,尤其是复杂的算法,临时学了你也不会用反而会影响心态,把以前做过的题目、重点、难点、模板拿出来复习复习,看一看背一背,考前注意饮食冷暖,下午有比赛的同学中午一定要休息,睡不着闭眼在床上躺半个小时,下午比赛精力也会充足些,当然也不要睡太久和藏獒科一样进场比赛了还双眼朦胧没睡醒,午觉时间不少于半小时不超过1小时。

比赛注意事项
1、进考场坐定后调整电脑屏幕分辨率至习惯大小,字体调为惯用字体,平时练习就要注意所用字体中的1、l、|、0(零)、O(大写o)、o、逗号、点这些容易混淆的字符是不是区分明显,建议使用Dev C++默认字体,字号不要太小,稍大些也方便查错。
2、进考场坐定后压缩包暂时不能解压,但是每道题目的文件名已经可以知道了,请在选手目录下建好所有文件,需要写的模板写好,主要有.cpp、.in、.out文件。
3、比赛开始先将第一页的时空限制看完,虽然1s+256MB内存是标准配置,不过也不是每道题目都是这样的,还是要认真阅读试卷首页的例题说明,把每题的时间、内存记到纸上。
4、之后花上半小时左右查看所有题目描述,不能走神,关键信息记到纸上,结合样例读题尤其注意题意不能理解错了,通读完所有题目并简单思考后将每道题归入某几个框架中,包括:模拟/枚举/分治/二分答案(近年考试热点)/搜索/贪心/动态规划/图论,之后再开始选择最容易的一道题开始深入思考做题。
5、做题顺序从易到难,信息竞赛比赛重点不是看谁把难题做出来了,而是看谁把该拿能拿的分数拿足了,不会做哪怕暴力拿个10分也是好的,有的题目就是暴力然后优化优化正解就来了,不要眼高手低,能做到这一点省一保底。
6、根据题目的输入数据范围大概确定算法复杂度,以下均是可能情况,不绝对:

20:2^20=一百万,O(2^n),爆搜就完事了
100:100^3=一百万,O(n^3),搜索/floyd
1000:1000^2=一百万,O(n^2),动态规划/图论
500000:O(nlog(2,n)),二分答案/分治/快排/归并
1000000:O(n)或O(1),数学问题/贪心/改变思维方向
1
2
3
4
5
7、即使题目看起来再容易,请你先设计好算法,明确算法的每一步要做什么,之后再去编程写代码,一定一定不要着急去写代码,骄兵必败;即使题目看起来再难,完全没思路,请你也不要提早放弃,拿起你的笔和纸,他们就是你最强大的武器,手动跑几个例子再深入思考思考,也许答案就在灯火阑珊处。
8、比赛切忌走一步想一步,先设计算法再编写程序,算法设计的时间要充足,尽量用多而强的数据去测试你的算法思路,算法思路成熟后再编程,即使是最简单的输入也要在算法思路清晰后再写,不能想一点写一点,不差这一会儿,因为代码完成后再调试修改所需浪费的时间太长,最好能一遍过。动态规划的题目请先把状态转移方程写好之后再编程,不要想当然的去写,否则可能会写到你怀疑人生三观崩溃,浪费时间、影响心态。
9、一道题目如果超过30分钟仍没有思路,想不出算法,请你先无视掉100%的那一栏数据,去想60%,40%甚至20% 的算法,在算法竞赛比赛中20分并不是小数目,尤其是当题目偏难时省一才100分多点,比赛并不是要你考到多少分,而且要是考的比别人多就行了,哪怕均分80分也会分出国一省一,你离省一国一可能就差这个5分,任何时候不要放弃,再努力一把或许就能成功,送大家一句我最喜欢的名言:成功不是终点,失败也并非终结,唯有前进的勇气长存,这是丘吉尔在二战至暗时刻所说的一句话,最终德国战败。
10、如果你发现你旁边的人写得很快,请你放心,他的算法十有八九是错的。
11、计算内存的方法:数组大小*类型字节长度/1000/1000=所占内存MB数,char和bool是1,int类型长度是4,long long和double是8。
12、如果大规模数据的算法正确性不敢保证。可分段处理:先写一个暴力程序对应小规模数据,再写一个高效程序对应大规模数据。以函数方式实现。这样也方便后续对拍。参考:小数暴力大数正解——namespace用法
13、写完程序之后,请一定不要忙着编译,请一定将你的代码从头到尾通读一遍,也就是静态查错,这是整个编程过程中最重要的步骤,有的变量重复调用问题调试的话,一个小时也看不出来,静态查错可以一下指出错误。
14、静态查错注意以下方面:
(1)数组开得是否够大?当然也不能超过空间限制。
(2)变量类型是否正确,答案和中间结果是否会爆int。
(3)memset时,所填的sizeof(XX)的XX是不是匹配,大小是否正确。
(4)外层循环和内层循环的i,j是不是混用了?
(5)循环变量的枚举范围是否正确,是否会数组越界。
(6)涉及到边界处理、加一减一之类的问题,请在纸上举个例子,标上下标以后,在编程时参照纸上的下标写。
(7)这个程序是在执行你想让他执行的步骤吗?
(8)读入优化处理负数情况了吗?在小规模数据读入时请不要读入优化,反之,则一定要读入优化。
15、通过样例后,请你一定不要放松警惕,因为样例并不能覆盖所有的情况,请自己设计几组大数据,争取卡死你的程序。特殊规律的数据,例如全是最小值、最大值、单调上升/下降数据最能影响程序效率与正确性。
16、如果出现问题,请你调试你的程序,请一定要分模块调试,不要从头跟到尾。
17、如果你已经设计不出能卡住你的程序的数据,恭喜你可以做下一题了。
18、为了万无一失,请你用return 0结束你的程序。linux系统评测没有return 0;可能会爆零。
19、在内存允许的情况下,能开普通队列就不要用循环队列,能开普通数组就不要用滚动数组;在时间允许的情况下,能暴力就暴力,高精度能不压位就不压位,优化不需要的就不要。总之,在不超限制的前提下,能不优化就不优化,以减少代码量和出错概率为第一原则。
20、当比赛还剩下5~15分钟的时候,请不要再改动你的程序,即使你怀疑他对你的一个输入给出了错误答案,因为你自己算出的结果也有可能是错的。
21、这个时候请你检查是否注释掉了该注释掉的东西,文件名是否写对,文件夹是否建对,一个一个字母对照着看过去,请一定反复检查!!!
22、请记住,OI不怕暴力,怕瞎算,不怕不会,怕不敢,有时间一定要写一个暴力程序去对拍,验证算法的正确性。
23、沉着、冷静,没有思路可以想办法(深呼吸、伸懒腰、吃东西喝水、上厕所等)放松一下,做能力范围内的事,尽力就好。不担心别人强大,小心自己失误。自己做得完美,就无怨无悔。