赛前必看的注意点(持续更新)

本博客用来记录遇到各种比赛遇到的各种问题,以此来警醒自己不要再次犯错,绝赞持续更新中;(另外,为什么我很严肃的写的这篇博客,内容读起来会这么搞笑啊,果真都弱智错误)

心态

看到一个似乎很难的题没什么思路,千万不要有“完了,这估计又是要用什么我不会的知识来做”的想法。因为这样的想法不会帮助你做出难题,但确实会让你做不出来或很晚才做出本应做出来的简单题。

把暴力简化是都能想到的思路,但有时候简化了却做不了/不好做的不如往暴力了想一想,例如2020ccpc绵阳G在注意到%3等价的性质后,其实就可以直接暴搜了,如果继续选择人脑讨论的话其实反而容易错。

debug

肉眼debug有时是个好的选择;

dbeug千万不能急!尤其当你手造出一个错误用例,十分激动就去改,然后改完了发现原来能过的样例过不了了(这还是好的),更糟的是,你改过了这个样例,原来的样例也依然ok,但可能其实刚找到的这个错误样例背后对应着一大类复杂、有一般性的用例,而你只相当于把它特判掉了,这就很糟糕,甚至增大了debug的难度。总之,想很清楚了再去改,不要对着错误用例改程序,对着程序改程序!

常见写炸原因

初始化问题,包括但不限于:

滥用memset导致T次memset带来的TLE。

写下\(memset(a,0,sizeof(node))\)的离谱语句,之中\(a\)是一个\(node\)结构体的数组;

初始化语句位置奇怪,比如把刚刚预处理得到的数据初始化没了;

初始化范围不对,尤其要注意按\(n\)\(m\)初始化的话,对应值域是否真的在\(n,m\)之内。例如2020CCPC绵阳J题数据范围是\(n,m \leq 10^5\)\(x_i,t_i \leq 10^5\),当做\(t_i \leq m\)进行初始化就疯狂WA而且很难查出(也是CF惯的,一般CF这种题范围就会是\(t_i \leq m\));

排序问题,包括但不限于:

因为样例里都是排好序的,就忘记写sort了;

有两个数组需要排序,只排序了一个(2020ccpc绵阳热身A);

排序语句位置奇怪,比如先排序再求前缀和写成了先求前缀和再排序(2020ccpc绵阳热身B......);

排序数组的长度别弄错了,比如\(sort(a+1,a+1+n)\)写顺手了,但有时其实是\(sort(a+1,a+1+m)\)或者\(sort(a+1,a+1+(n-1))\),这个出错了同样很难查;

数学相关问题,包括但不限于:

忘记取模!忘记取模!忘记取模!

小心使用组合数时上比下大、出现负值的情况。

其他问题,包括但不限于:

注意边界情况,尤其是区域赛不会像CF那样自动帮你在数据范围里忽略一些边界情况,例如\(n\)取0、1、2时和各变量取0时;

注意输入是否写反了,比如输入\(n,m\),被写成了读入\(m,n\),而碰巧还因为样例就是\(n==m\)的而过样例了,注意所有样例中相等的变量都要小心检查,程序主体里也要注意;

枚举一些量的时候注意范围,尤其是边界,比如枚举应该枚举\([0,n]\)时错误枚举了\([1,n]\),如CF1475D在枚举拿多少个普通app的时候范围就应该是\([0,n]\)

posted @ 2020-11-02 14:49  炸鸡块君  阅读(66)  评论(0编辑  收藏  举报