就是错题整理了,其实也会把一些不该犯的失误整进来。
其实之前一直拖着不想写,直到某次模拟赛,看错了2道题,顺便爆了一道题的int(没错第一个点就会爆)之后爆零了,吓得我赶紧把这篇博客搞出来了......
只是个人向的总结,写的细了一点ovo。
模拟赛相关
比赛经验还不够,考前提醒一下自己
- 审题错误
好难受啊,这个东西。一般来说是不用担心这个的,但这次模拟赛的题面,我真的不想承认是自己脑回路清奇的原因。
模拟赛我已经尽力了...我觉得题意不清,然后审了好久的题,然后审错了。
当然,这是个意外,毕竟大多数比赛的题面都是很符合一般的语文水平的。也不排除会有题意不太理解的地方,不要太紧张,多审几遍题,如果真的是题目本身的问题可以尝试寻求帮助(noip应该不会出现这种问题吧)。
- 一下子没思路怎么办?
考了很多模拟赛了,基本上来说,遇到这种情况不用太担心,不要慌。遇见过几次这种情况,紧张的时候一般题目更没有什么进展。一般来说,noip难度的话简单题思路是肯定没问题的, 静下心来,把一些思路和题目的小细节写在草稿纸上,解题一般就没什么问题了。
- 最后剩一些时间该干什么?
千万不要觉得自己没事干了!或者觉得自己反正只剩半个小时什么都写不出来之类的,还有很多事要干。这不是说一定要尝试着再想出并写出一道题的正解,你需要上个厕所(或者干点别的什么放松一下)然后清醒地查一下程序有没有zz错误,然后记得把freopen和文件都搞好。不能因为zz错误丢了有把握的正解and暴力分。
- 还有......
拿到题后想到算法一定要大致证一下正确性!(贪心什么的玄学除外,可以大力猜结论,多出数据试一试)记得多考虑一下边界,特例之类的。不要觉得样例(尤其是小样例)过了就ok了,如果样例很水是可以用无数种错误方法过掉的qwq
数组大小,类型相关
数组开的大小应该不用多说,就是开的比题目数据大一点就ok,记得一些建边,队列(手写的那种),栈,dp数组和一些奇奇怪怪的东西要单独算。别开太大了,记得算算内存,然后也没什么了。
然后,这个类型啊,记得算好数据范围,尤其注意一下要不要开long long,要不要打高精,精度够不够。
然后,好像之前做过一道题,开int会爆空间,数据又挺小的,就直接开short了。类似的小技巧可以注意一下。
诶?为什么会炸?——那一些细节可要注意啊
字符串的读入需要特别注意一下(可能只有我一个人菜到这个可能写出偏差),看看它有没有读空格或换行。像是scanf读入不加‘&’号,想好要读入字符串时,是读s还是s+1。之后处理时要与读入一致(还有用strlen也要一致)。
变量名要遵循一定规则起,注意函数内变量名和全局变量是否同名,不要在循环内随便更改循环变量的值(不过这些编译比较容易查出来)。
还有运算优先级!加几个括号也不会让你的程序瞬间TLE,只会让你的运算正确而有条理,括号是个好东西,位运算什么的尤其要多加。
一些东西平时就应该养成良好的习惯,比如多组数据的memset清空啊,为数组的初始赋值什么的(说起来我还忘过给并查集的fa[]赋值...)。还有,memset()不能赋1,赋值时注意一下数据范围,比如赋极大or极小值时会不会不够大or不够小之类的,也不能超变量类型所能表示的上下界。
如果调试时炸了,要看一下你有没有写什么奇怪的无限循环啊,无限递归啊,或者什么除了个0这种让程序崩溃的东西......怎么说呢,我真的什么奇怪的错误都写的出来QAQ。
运算时还要注意运算变量的类型,个人感觉int/int是变不成double的,记得学会强制转换啊,加个‘.0’这种常规操作。
还有,注意头文件!不要老用万能头文件,调用某个库里的东西就要在头文件上加上它!不过一般也就5,6个常用的。
然后,应该不用说了,scanf()里输出%.(数字)lf时它会自己四舍五入,不用手动加0.5这种东西。
最后,如果我的程序不输出了,还有可能是我根本没写要输出答案。