[关闭]
@happyforever 2018-10-31T14:22:22.000000Z 字数 4729 阅读 668

10.29考试经验分享

清北学堂 考试经验


考场策略

Day0

试机和两天考试都是在同一位置
1. 试机的时候查看鼠标灵活度,保证不会影响写代码。如果能用但是不好用
2. 保证能用鼠标键盘之后,尽自己所能多写一些代码,要尽量手和键盘磨合磨合,以便在比赛时少一点手误
3. 就是多写点代码,没必要想在那么短时间里写什么高难度算法再调试半天,主要目的是找手感

每天开考之前

如果考试举办方允许动鼠标和键盘的话,
1. 整个资料的组织做好,也就是把整个文件夹的结构做好,哪一个文件夹干什么不能弄混。
2. 程序基本框架,头文件,读入优化之类,都写出来。

通读题目

  1. 一般来说打一个比赛是要先通读题目的,读完题目看完样例保证自己对每一道题目理解都是正确的,再去做题。
  2. 如果自己正常发挥能500+,其实noip难度第一题读完了直接写也可以,争取在开考分钟掉第一题

题目顺序规划

  1. noip一般第一题入手错不了
  2. 二三题要评估难度确定做题顺序,但是这里的难度是得分的难度不是的难度
    也就是说哪个分好拿(代码长度、思维难度、调试难度)写哪个。。。
    比如你发现第分很好写,第分好像会做,但是微微细节比较多:果断先写第题,因为如果陷到第题的细节里面是非常麻烦的

思考问题

当想出一个做法之后,怀疑的眼光审视自己,“我一定是做错了。不可能这么简单”“我肯定是读错题了”“我猜的那个性质一定有问题”“我复杂度分析时肯定少考虑了什么”之类之类
这个真的屡试不爽。

写代码

写代码前,要想想,可不可以换一种代码实现然后代码难度小很多

2017国家队队长毛啸:“Think twice,code once ”

有一种比较麻烦的情况

写着写着代码的时候,写了有半个小时了,突然发现自己的做法有点问题就慌了
这种时候很容易全盘否定自己的做法
但是其实可以试着花两三分钟想一下是不是这个问题就是要解决的最后一步,可能再挖掘一下问题就ok了
发现真的不可挽救的话,果断放弃,直接上暴力

写出来的不要错

最后就分钟了,有个分的暴力好像还可以写,紧忙活的话分钟就能写出来。
如果你平时写代码就是那种非常稳,代码能力比较强,细节把握能力比较ok的话,可以写。
如果平时就容易写出bug*来,不建议再抢最后分钟,把原先代码的边界情况检查一下,时间什么的测测,比较满的话,就看看能不能小卡一波常数,保证写上的不丢分。
信息竞赛对细节把握的要求太高了!

不要一激动直接敲键盘

在想出一道题目的解法时不要一激动直接开始敲键盘
首先要以怀疑的眼光来看看你自己的做法是不是正确的。
1. 比如前文提到的和自己说“这么容易就想出来?肯定没这么简单”。
2. 就算是证明了正确性,也需要再想一想看看能不能找出一个写起来更简便的实现方式,留出更多的时间。
3. 最后把自己的思路再理一遍,可以写到纸上,记下来大致关键顺序

不要太依赖题目给的大数据

OI系列比赛吐槽给的大数据水的已经太多太多了。
1. 一般计数题比较稳,过了大数据就问题不大了。
2. 但是很多贪心和部分数据结构,需要更加注意一点,有时间写个暴力就写一个,程序的边界问题出题人不会让它这个样例数据体现出来的。
3. 出题人出一套题会写很多造数据程序,强边界和极限数据留给你最终评测,再写一个巧妙避开所有边界极限情况的数据正好给你发下去
4. Noip是程序交上去一个星期成绩才公布,谁知道那一帮出题人会不会面向
程序造数据

从部分分到满分

noip的比赛中,一道题目有时会设置分或者分的部分分。
这里所说的不是(对于的数据……对于另外的数据……)拼起来的。
◦当我们想到了,分做法到分,往往是挖掘出一个关键的性质,然后一个关键优化就ok
◦一般不会出现是完全不同的思路的情况

更本质的

如果我们遇见的是一个有良心的出题人,并且题目本身数据不是那种大表格,就几类。
那么他题目的较小的数据范围,应该是会对较大数据范围有启发作用而不是(把别人往歪路上引)
前提:良心。
(而大表格,情况是不太一样的)


不失误就是最大的成功!


各种遗憾丢分

语文不好,读错题意

  1. 最好的选择是读完题,按照自己理解的题意模拟一下样例,
    判断是否正确,可以使读错的概率小很多。
    (不排除毒瘤出题人,故意出一个各种题意都能对的样例)
  2. 遇到热爱文学的出题人,把一句话说完的事硬生生写了3页时,我们要选择淡定从容的风度,微笑着答完题我们考完再寄刀片
  3. 关注加粗部分的文字

非负整数不是正整数
int范围内包含负数

数据范围看错

  1. 有的时候是少看了一个限制条件,有这个条件能好做很多。
    有的时候是对自己太自信了(对于太自信的问题,以怀疑的态度审视自己挺有用的)。
  2. 因为现在oi系列比赛部分分设置的实在是非常繁杂,先尝试记住各种部分分在想题目解法很容易出问题,最好就是先想做法,然后再看看自己的做法对应到数据表上能得多少分

边界情况漏判

  1. 比较经典的有极小的边界情况,或者
  2. 当你对一个问题不是非常拿得准但是感觉也差不多时,而边界情况比较好算或者好写时,边界情况多判判没有害处,毕竟我们可以用来对主程序的进行一定的验证。
  3. 不管最后代码上是否把边界情况特殊处理,边界情况一定要在做题的时候想到

图论问题

  1. 没有考虑重边和自环。
  2. 没有考虑图不连通。
    举例:“我们给出一个n个点n-1条边的无向图”曾以为出题人心中只有那唯一的一棵,没想到他还有好多环套树。
  3. Tarjan求强连通分量只
  4. 并查集没初始化

时间空间复杂度分析错误

  1. 以为自己想到正解,写了半个小时才突然发现复杂度不对,或者是这个做法空间竟然开不下?!
  2. 想出来一个方法,但是总感觉复杂度不对。结果考完了发现均摊时间复杂度来算它就对了,追悔莫及。

取模不够

  1. 两个int相乘,考虑转化为long long再取模
  2. 注意一个单独的数字是int类型的,要是乘法有单独的数字注意在数字后面加这样就是long long类型的了。如果是前者,乘一个变量变成大于int的话也是会出问题。
  3. 这个取模问题可以在写完整个代码之后单独查一遍,单独查!
    因为写代码的时候需要注意的东西太多,就算很仔细也可能会漏下一个小问题,然而小问题就可以让一道题目完挂。
  4. 模数是合数,直接费马小定理了?(这个时候需要扩展欧拉定理)

忘记预处理或者是没有调用预处理函数

这个一般是能在测样例的时候找出来,只不过把时间花在忘记调用预处理函数上就有点不值得了

排序没加cmp

注意堆的cmp要特殊一点,与正常的相反

忘记开long long

  1. 注意在int下是开不下的。
  2. intlong long混用的时候要尤其小心。(但是不建议全文long long
  3. 输入输出不要忘了用%lld,打成%d很尴尬。

Double问题

  1. 输出要用%lf%f会有精度误差
  2. 浮点数直接强制类型转化为int是向绝对值小的方向取整,不是四舍五入!!!!
  3. %.0lf是四舍五入保留到0位小数(保留整数),也不是取整,取整的时候要用ceilfloor

数组大小没开对

  1. 太没理想(开小了RE
  2. 太想改变中国(开大了MLE
  3. 这个在是在最后会单独查一遍。

数据忘记清零和初始化

  1. 多组数据忘记清空所需要的数组,或者是tot,ans,cnt等计数变量。
  2. memset只能赋一些特殊的值,((一个大约
    的数)),不是想赋值成什么都行的。
  3. 数据组数很多,但是每组数据都比较小,然后每次都memset导致超时。
  4. 对于数组和取模都写完之后再单独查一遍,感觉单独查很有用

调试信息没有删除

最后五分钟把要最后交的代码再检查一遍

输入格式

scanf(“%d%d”,&n),scanf(“%d”,&n,&m);

卡常或者卡精度


1. 这个需要在平时就养成一个好的代码习惯,用邻接表不要写
少用点stlnoip又不开O2
2. 还有就是数据结构的选择,选常数小的数据结构,BIT代替线段树。
3. 能不用double就不用double,有的问题时只需要比较大小,就别用double了,用分数来比较大小。总而言之能用分数就用分数
4. 把模数的变量名改成wys(雾)


对拍!


暴力技巧

暴力的定义

首先暴力是分很多种的,我这里说的暴力是低思维含量的部分分。
就是一道题可能用了线段树等数据结构,但是只是套个模板,我们这里也是称作暴力。
也就是说,深度理解题意之后,在一些数据的特殊情况下是转化为某个算法的模板,或者是直接模拟枚举就能得到的。
对思维的要求并不高。

深度理解题意

noip的考场上,不管是第几题,都会给那种只要理解题意就能得到的分数。
(比如一个计数题,会给一些数据,并不需要和正解类似高级的动态规划等算法,我们可以直接用自己的小学数学知识来手玩出来)
所以考试的时候,一道题爆零是非常非常不应该的。
这样的分不一定会多,但是分也是非常重要的

写暴力的要考虑的

  1. 分值。
  2. 估计代码长度。
  3. 细节多不多。
    我们需要在之中找一个平衡点,要对自己写多长的代码需要多少时间有一个把握。

做题的时候要对暴力整体分分

现在的,往往走大表格数据分类的风格。
这个首先是和我们平时做的题的数据分类不太一样,要是乍一看的会有点蒙。
我们在尝试写暴力的时候要对这个表格整体分分类,每道题选几个暴力写(我们当然不希望一道题写4、5个暴力)

挑主要暴力写而不是写太种暴力

我们希望的是写上一个对一个,而不是写的很多然后每一个都有一定概率对。
我们自然不希望把命运交给寄托在自己的皮肤颜色上

为什么大家都会写暴力,却不能都拿一等?

你的暴力不是人家的暴力
绝大多数人会把暴力写错的,或者懒得写小暴力。你只要拿好所有暴力不失误,一等奖是很轻松的。
不失误就是最大的成功。

骗分技巧

数据是死的,人是活的,出题人是懒的

求最优解?

  1. 多种奇怪贪心或者不能保证最优的dp取最优值()。
    动态规划:充分描述,尽量简洁
  2. 随机化一下(爬山)。
  3. 随机化和贪心按照某种比例结合。
  4. 暴力,加各种奇奇怪怪的特判和剪枝(出题人不一定能想到你的剪枝)。
  5. 基于某些东西暴力(比如树上的题目和深度有关,点的度数有关的暴力)

另外最好少打一个

不要太老实,写的什么特殊性质暴力就直接判断在那种情况下运行
如果你会两类数据,
你写

  1. if(n<=100){work1();return 0;}
  2. else if(k==1){work2();return 0;}
  3. return 0;

完全不如下面这种写法的

  1. if(n<=100){work1();return 0;}
  2. else{work2();return 0;}

特判样例

输出


心态

考前心态

1:首先没有什么好怕的,考差了本身没有什么好怕的,早晚东山再起。
2. 考前保持一个平静的心态。
3. 根据人品守恒定律,考试前丢钱了应该高兴。

考试

  1. 如果发现题简单自己会做,不要高兴,高兴容易出细节问题,就算题简单,也要警告自己不要大意。
  2. 如果发现题难,要调整心态,正解不会打暴力,能拿多少暴力分就拿多少,只要尽力去做了没有什么好后悔和焦虑的。
    并且从另一方面,如果考场上持续焦虑只会让成绩更低,如果稍微有焦虑的情绪出现,就要赶紧冷静下来

考前

◦考试前一天早睡之类就不说了。
1. 在深秋加上劳累易感冒,考试前一个星期开始注意保暖,保证绝对的最佳状态。
2. 提前两三天注意饮食,尤其是考试那两天,肠胃不好的就不要多吃性寒的食物,拉肚子是非常影响考试的。
3. 提前三四天(最好再多几天),调整作息时间,不能指望平常1点睡觉,考试前一天突然10点半睡能很快睡着

考试时

  1. 题目模棱两可的地方,果断问,绝对不能有任何侥幸心理。
  2. 电脑不好用,键盘不好用,果断换,别不好意思麻烦老师。
  3. 要提前观察电源位置,不要一脚踢上去,断电关机(真有
    不少次发生过)。
  4. 水放地上,不能上桌子上,拧紧瓶盖,让漏水没有可能。
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注