算法竞赛细节汇总

来源:互联网 发布:网络对大学生的好处 编辑:程序博客网 时间:2024/05/16 23:52
  1. 注意有取模时要注意模数的大小,有可能两倍会爆int导致答案错误. 同时答案之间如果是加减可以if (ans >= P) ans-=P; 否则要 ans=1LL*ans*X%P
  2. 如果读入数据里有负数不能直接用读入挂,要判负号.
  3. 使用位运算时要注意可能会溢出(如1<<35和1>>35 均会溢出).(实例可见 Topcoder SRM 613 Div2 Level three)
  4. 三目运算符(?:)的优先级很低,甚至低于+、-,尽量少用或加括号.
  5. 部分位运算的优先级较高,如!、~,相当高,然后是*、/,再是+、-,最后是>>、<<,更低的有&、^、|.
  6. 涉及到LCA的问题要注意可能在同一个子树内计算.(CF715E)
  7. 结构体排序的operator一定要这样打:
bool operator < (const node &A)const{    return ...}

注意两个const不能掉.
8. 处理割点时注意根节点的处理,当且仅当获得的搜索树中根节点的儿子不止一个时才算上.
9. double型,printf()用%f输出,而scanf用%lf来接受输入(POJ3744)
10. 有关概率dp常常是正推,期望可能是逆推,并且一定要注意到除数不为0,注意特判
11. EPS可以取1e-9, 往往比较保险,double精度..
12. Splay在Insert是如果遇到val==x时return的情况注意先splay一遍,更有利于把查找频率大的节点放在根附近达到均摊复杂度的目的
13. 用Splay解决问题的时候一定要注意删除节点时对sz的影响,初始化节点的时候一定要son[x][0]=son[x][1]=0;
14. 延迟更新是对节点u 的所有儿子使用的,对于节点p是直接更新的.(注意Splay 的规范性)

0 0