一大堆常犯的错误、提醒和公式

注意事项&错误

  1. 论有效对拍和测试极限数据的重要性
  2. 不要局限思维
  3. 不要被某些神奇的C++调试错误坑
  4. 不要主观臆断认为一个算法会TLE。——Werkeytom_FTD
  5. 别老忘记清零标记!
  6. 用∑合并式子的时候小心特殊情况,特别是当有 T < S 的情况时! 如:
    ( k 1 ) m k m = i = 1 m 1 C m i ( 1 ) m i k i

    但当 m = 0 , k = 0 时要加特判!!!
  7. 不要懒得加%&开LL!!!!!!!!!!
  8. 打题前先把整个程序仔细想一下,别急着!
  9. 打程序的时候用心点啊!!!别老写错变量啊!!!
  10. 改了循环变量的时候记得仔细检查一下下面的程序
  11. 当题目需要大规模连边时,考虑用中介点代替暴力连。
  12. 不能太依赖对拍!
  13. 改数据结构的时候一定要好好检查没有改的部分(merge),老在出问题!
    14. >>>>记忆化的时候(特别是杜教筛),能不放hash里就别放,常数++!<<<<
  14. 哈希数组不能删除!
  15. 判断两数是不是0时(线段树),不能用(!(l1*r1)),因为 ( i n t ) ( 65536 65536 ) = 2 32 mod 2 31 = 0
  16. 分块时要用 n i 暴力算一些数时,可以先预处理小的,因为大的不会有很多;
  17. 斜率优化没有等于;
  18. 在做公式题时,考虑理解式子的意义【例】
  19. 当想到一题的分治做法时,考虑是否可以把分治倒过来做,优化常数/代码量 ;【例】
  20. 优化DP**观察变化小的变量,考虑去掉冗余状态,如遇到有差的题目(如极差),考虑用差分优化**;【例】
  21. 判断语句并列式,注意顺序,先判断越界
  22. 代价贪心考虑二分判定合法。【例】
  23. 树上问题与路径相关,优先考虑点分治;
  24. C公式记得判断 m < n

一些奇怪的吼东西

【技巧】浅谈Johnson算法
【技巧】可撤销贪心
【黑科技】用树状数组解决区间修改查询问题
【莫比乌斯反演】非正常套路
【二项式剩余】Cipolla(模意义下开根)
【容斥妙用】快速求积的和

一些容易忘记的公式

莫比乌斯反演的套路

f d = i = 1 n d g i d

反演:
g d = i = 1 n d f i d μ ( i )

还有:
f n = i | n g i

反演:
g n = i | n f i μ ( n i )

附加1:
i | n ( n > 1 ) μ ( i ) = 0

附加2:

i = 1 n j = 1 n gcd ( i , j ) = d = 1 n d ( 2 ( i = 1 n d φ ( i ) ) 1 )

欧拉函数的性质

i | n φ ( i ) = n

证明在这里

μ φ 的关系

i | n μ ( i ) n i = φ ( n )

证明在这里

x , y 使 gcd ( x , y ) = 1 ,则:
gcd ( x + y , x ) = gcd ( x + y , y ) = gcd ( x y , x + y ) = 1

max ( a , b ) = a + b + m i n ( a , b )
min ( a , b ) = a + b m a x ( a , b )

猜你喜欢

转载自blog.csdn.net/howarli/article/details/51823336