- 找最大值的时候用 $\ge$ 而非 > !尤其是要确定最大值的位置的时候!(fst*1)
- 交代码之前一定要检查:
- 文件名
- 部分分对应关系(包括数组!)(因为这个爆掉部分分)
- 内存占用(windows也可以使用MinGW中的size!)(因为这个爆0一次)
- 认真用 5min 读题+划重点,尤其是CodeForces的英语题面! 把重点写在草稿纸上!包括但不限于:
- 多解的处理 ?
- 最大化 / 最小化 ?
- 重复元素处理 ?
- 样例解释?
- 正式比赛中绝不能随机开题!不然最后时间都是乱的,后果很严重!
- 一般开题顺序
- 网络流 ( $n \le 50 / 100 / 200$ )
- 图论
- 较为显然的DP
- 感觉好像可以做但是思路不清楚的题(这种最危险,很可能写几个小时候发现是假算法!)
- 爬山 / 模拟退火,答案状态和当前状态一定要清晰分开!每次先拷贝一份答案状态并加以修改,再看能否替换答案状态!最后只能输出答案状态!为了避免混淆可以叫做
(Tans,ans), (Tnxt,nxt)
等等。 - 纸上写 DP 方程时使用 $i, j, k$ 而非 $n, m, \text{etc.}$
- 滚动数组只能滚一维,否则会交叉!
- 如果费用流中没有负权边,就可以大胆地删除原始对偶中的第一步 SPFA ,全过程都使用 Dijkstra !这样有利而无害,还可以预防被卡!
- 如果要判断无解,就一定要在发现无解的时候立刻退出!!!
- ❎❎❎
#define FAIL() puts("-1")
- ✅
#define FAIL() do{puts("-1"); exit(0);} while(0)
- ❎❎❎
考试时间如何安排
- 首先用整整半小时阅读题目,卡准一个题10min,这个阶段可以弄清题意,大概估计难度,还可以略加转化(但是不能在一个题花费太久)。原题也可以在这一阶段识别。
- 用1h打所有题最低档暴力。按照这几年NOI命题趋势,给出一整道送分题不大可能,所以打满暴力一般就有70-100分了,相当于做了一道题。如果看出了原题,再用20min加以确认,然后可以先写(小心误判,这时果断扔掉)。
- 用2h解决认为最简单的一个题,但是要注意,如果思路不清晰,马上换题。如果都不好写,就找一个会高分部分分的题目。
- 用45min写中档题的部分分。一般可以放弃最难的题目。如果最难的题目部分分可以做的话,用剩下的时间写。否则可以考虑想想中档题正解。
- 最后10min检查文件名。不要随便改代码。 这样的话理想情况得分在160左右,按照去年NOI的话是前100名。