## 挂分技巧总结
#### 考试结束前要检查的
1. 文件名
2. 编译:比赛过程中严格按照题目给定编译选项编译。比赛结束前把每个题的可执行文件删掉然后编译一遍,新生成一个可执行文件。看 Warning.
3. 数组大小:是否满足空间限制(各个 namespace 的内存和栈空间消耗的总和)、是否开够了(严防差 1)、指针大小为 4 字节(32 位机)、deque 和 queue 占内存很大
4. 有取模的题要检查取模
5. 多测清空:千万注意表示个数的变量,一旦不清空导致个数累计,小数据测不出来;小心每次 ```memset``` 整个数组造成 $O(T\cdot \text{max}N)$ 的复杂度
6. Warning 一定要开,写完题之后一定要看,但不能因为开了 Warning 而忽视其他几条
7. 调试输出要删,某些输出方案或大讨论题删的时候必须格外小心,不要把输出答案的部分删了
8. long long 的问题:逐个检查有没有要开的地方没开、输入输出用 %lld、注意不要乘爆、卡常题别用 ```#define int long long``` (NOI Linux 是 32 位的)
9. 输入输出:严格按照数据类型读入,注意时间消耗
10. 写完题之后要测极限数据(因为有些挂分会导致 TLE/RE 而不是 WA)
11. 数据分治:写了数据分治的题目,最好在比赛最后把每个部分分都造一组数据测一测,并确保你运行的是这个部分分对应的那个子程序。
12. 特判:看各个变量取值范围的下界,例如 $n=1$ 有时要特判
13. 越到考试结束前,改代码越要冷静、慎重!!
#### 迷惑挂分纪实
1. fread 写挂
2. 在比赛最后不小心把读入 $a_i $ 的语句放到了数据分治的某个分支里,导致另一个分支没有成功读入;并且造数据测试时只测了一个分支
3. CSP2019 D1T1 过了大样例之后忘记测小样例,然而大样例 $n$ 是偶数,实际上自己的代码在 $n$ 是奇数时都会挂。
4. PKUWC2018 D1T1 题目给定条件“$0\le a_i\le ...$”因为没有意识到 $a_i$ 可以是 $0$ 导致一直只有 $10$ 分。
5. Dijkstra 写成了大根堆
6. 用 %d 输出了 long long 或者用 %lld 输出了 int
7. 树状数组修改下标为 $0$ 导致死循环
8. 对拍程序没有每运行一次就换一个种子导致对拍效率很低(windows/linux 的 time(0) 一秒一变,导致如果使用 time(0) 作种子一秒只能拍一组)