NOIP2017 之前

再过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+......+f2n1=f2nf2+f1.
     
     2. f2+f4+f6+f8+......+f2n2=f2n1f1.
     
     3. f2n=f2n+2 fn1fn.

  • 一类通过 +1 1 将序列变为单调递增的问题: 这类题目有一个经典转化: 将 Ai 变为 Aii , 问题转化为让所有数单调不降 .

  • 遇到有向图的路径问题, 不妨试试缩强连通分量转换成 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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值