一 . 审题
1.看准需要输出的是什么,如果要输出多个答案,先标出输出顺序!!不要把答案弄反了(也不要把读入的变量弄反了)
2.一定把重点标出来,尤其是“最大”、“最小”这样的词,别把最大和最小弄反!!
3.仔细读题,仔细读题,仔细读题!!!!
二 . 浮点数精度
1.二分浮点数时,二分边界多精确一点(精确太多会T),一般比要求的精度多一点就可以了
2.有些莫名其妙的精度问题,不知道是怎么回事,尽量避免
三 . 数组
1. 千万别MLE
2. 千万别开小,注意检查一下有没有数组访问负数下标的情况,最好设置一些极端数据,考试时,把中间过程输出。因为有些边界处理(比如dp的转移),很容易访问负数下标
3. 数组sort时,一定把里面的排序区间写对(尤其是最小生成树里,别顺手写成n),写sort时先想一下再打。。
4. 如果要开多维数组,把空间小的放在前面,会更好
四 . 字符串
1. string不能赋值单个字符,但是可以用加法
2. scanf读入字符或字符串时,如果读入字符串,scanf自动省略回车(把\n当做输入结束的标志),如果读入单个字符,会把\n(回车)和\0(空格)也当做一个字符读入
3. sort函数并不能直接使字符串按照字典序排序
五 . STL
1. 用队列啊,栈啊什么的,一定要记得判断队(栈)空!,而且在if语句中一定要放在前面
2. 小心使用vector,倍增申请空间,可能会爆
六 . 初始化
1. 尽量少用memset啊,会超时,尤其是函数里多次调用,能不memset就不memset
2. 多组数据,把同样样例反复复制,输入,看初始化是否有遗漏或者错误
其它:
1.要是需要开long long的,就把for循环里什么的都改成long long(除了int main全替换掉),并且把scanf和printf里的%d都改成%lld或%I64d
2.图论的题,开数组时,如果是无向边,一定要开至少两倍空间
3. lca的两层循环千万不要再打错了
4. if或while里判断语句一定要尽量多加括号!!
5. 一定要手动出样例,多出几组!!
6. 记得自己打的是最长路还是最短路,如果打spfa-lf的话,别把小于号和大于号写反了。。
7. 不要忘了可以打表!打表!打表!
8.数论题不光可以打表,还可以打表找规律啊,找规律啊。。。。
9. 开始打程序之前先梳理好思路,不要还没想好就开始打。细节问题先在纸上或者是记事本上列一下,提高打代码的效率
10. noip的难度不一定是严格递增的,所以先看完所有的题,并手推一遍样例!!
11. 一开始读题的时候就把每一个题都好好想一遍,不要急着打,想好怎么做再打
12. 题目给出的数据是否是有序的(没说并且做题需要有序的话,一定要sort一遍!)?是否一定大于零?……各种特殊条件都想一下。。总之看准题目给出的数据要求!!
13. 如果用到并查集,别忘了有时候需要先路径压缩一下再调用fa数组
—–未完待续——
PS:以上都是血泪经验