再过1天就要联赛了, 去年的这个时候还有10天, 今年的准备时间倒是比去年还要紧张呢.
想想去年 Day1 没仔细审题规划好时间, Day2 基础不扎实没拿到该拿的分, 导致最后的爆炸. 今年经过了一年的春华秋实, 基础什么的也渐渐的补平, 低级错误就不能再犯了.
准备工作
记得抄好或背好自己习惯的 Vim 配置, guide 是真心不好用. (虽然以前所有OI比赛一直用的 guide 但还是忍不住想吐槽)
赛前几天调整休息时间, 晚上少玩手机好好睡觉. (赛前白天和赛后随便玩)
看看不熟的模板, 减少赛时调试的时间.
坑点
注意取模.
位运算要打括号! (尤其在宏定义的 For 里面当参数时)
变量名不要打错.
int 乘法注意可能溢出.
STL 极其耗氧, 尽量减少使用.
注意常数影响.
仔细审题, 题目难度不一定递增.
技巧
(自己总结的以及最近看到的)
写 DP 题之前可以先写好搜索, 这样状态的选取会简单许多.
解决二进制问题的一种思路: 在 (mod 2k) 意义下考虑, 而不是仅仅单独考虑每一位的贡献.
如果题目要求全局答案最优, 单调性也可以是答案的单调性.
斐波那契数列第 n+2 项同时也代表着集合 {1,2,3......n} 中所有不包含相邻正整数的子集个数.
斐波那契数列其他的公式:
1. f1+f3+f5+f7+......+f2n−1=f2n−f2+f1.
2. f2+f4+f6+f8+......+f2n−2=f2n−1−f1.
3. f2n=f2n+2 fn−1fn.一类通过 +1 或 −1 将序列变为单调递增的问题: 这类题目有一个经典转化: 将 Ai 变为 Ai−i , 问题转化为让所有数单调不降 .
遇到有向图的路径问题, 不妨试试缩强连通分量转换成 DAG 图会不会好做一点.
卡常
Noip 为 Linux 评测, 读入优化时用 getchar_unlocked() 会快许多.
不开 O2 的时候, 一些 std 函数例如 min,max,swap,reverse 之类的, 尽量手打.
非递归函数可加 inline.
尽量减少新建变量的次数, 一些临时变量能重复利用就重复利用.
在创建数组时, 若出现这种情况:
int dp[2][10005];
不妨改成
int dp[10005][2];
调用数组时, 尽量减少寻址的次数. 若要经常访问 a[i][j] 的值, 较好的解决方法是用临时变量 tmp 存下 a[i][j] 的值, 每次查询 tmp 的值即可.
若出现以下语句:
for(int i = 0; i < a.size(); ++ i)
不妨这样写:
for(int i = 0, s = a.size(); i < s; ++ i)
假如实在想用 STL , 可以去看看 pb_ds , 这玩意没那么耗氧, 而且功能比 STL 丰富, 最重要的是 Noip 让用.
总之, 卡常就两大点: 人为减少不必要的时间消耗 (新建多余变量, 冗余寻址, 不必要的重复计算等) 以及利用程序内部逻辑结构优化算法细节(手打一些std函数, 位运算, pd_ds 等).
心态
好难, 做不出来..
首先要保持冷静.
心里默念: “我做不出来, 他们也不一定做的出来.”
再把题认真读一遍, 说不定是题意理解错了.
发现题意没有理解错, 还是没有思路. 想想打表找规律或是猜结论.
先盖住那 100% 的数据, 看 80% ~ 30% , 尽量拿多的部分分.
先不管这题, 看后面的题.
做完回来看还有没有思路?
建议去上厕所, 说不定在蹲坑时来了灵感.
还是没有, 那就先保证拿到可以拿到的部分分, 剩下的数据可以思考一些不完全正确但是很难被卡掉的做法. (也就是骗分)
提高智商, 上帝保佑.
妈蛋, 看错题了!
首先要保持冷静.
赶紧再把题仔细读一遍.
把原来写到一半的错误代码只留下头文件, 读入优化等必需品, 其余的一律删掉.
开码正解.
仔细审题, 提高严谨性.
拍不上, 调不出来!
首先保持冷静.
检查 gen 有没有写错, 数据是否合法, 以及暴力有没有写错.
不要只局限于算法中容易出错的地方, 看看函数名, 数组名, 变量名是不是写错了.
检查发现名字什么的没写错, 那就检查算法逻辑是否正确, 或者重新分析算法本身的正确性.
重新审题, 检查题意是否理解错.
题意没有理解错, 那就开始分段调试, 检查每个步骤是否有问题.
还是没调出来, 先放一放, 写后面的题, 反正我还有个暴力.
写完回来还是没调对? 优化自己的暴力, 尽量拿更多的分.
静态查错 + 动态调试.
码完之后.
检查是否开了文件, 文件名是否正确.
检查数组大小.
即使这题不对拍, 也要记得造极限数据. 跑不过或者时间很极限就卡常.
不要只拍大数据, 一定还要拍小数据. 有些大数据查不出问题.
查完之后没问题? 稳了, 下一题!
考完之后.
即使自己考的不错, 也不要炫耀, 可能这次你运气比较好, 而其他人却没有发挥好.
即使自己考的不错, 也不要装弱, 可能这次你运气比较好, 而其他人运气比你还好.
不管考的怎么样, 回机房都要开车, 毕竟马上要回去补文化了.
最后, 祝大家 Rp ++ !
Noip Bless All.
——wrote by miraclejzd.