04/12
15:14
OI

退役操作集锦

  1. 打错freopen,不删freopen,OJ交题不删调试什么的。

  2. INF = 1 << 30,memset了0x3f,最短路,导致奇怪的bug。

  3. 网络流板子打错,因为网络流的玄学性,错板子过了题结果一直错着。

  4. 莫队忘记给每个位置标记在哪个块就去排序…TLE。

  5. node.x 和 x 分不清。变量名字不重复最好。

  6. n和m范围不一样挂掉(这个太多了…)

  7. 答案int范围,过程中爆了int,不开long long见祖宗 还有不取膜爆long long的!!!!

  8. 位运算不加括号。

  9. 任何图论题没有特殊说明一定考虑不连通的情况!!!

  10. 压行,把循环里那玩意写成了注释掉的东西,成功挂掉。

    for (int i = 1; i <= m; ++i) {
        int x = rd(), y = rd();
        a[i] = y - d[x];
    }
    // a[i] = -(d[rd()] - rd());
  1. 求阶乘逆元的时候不求0!的

  2. 对于每次操作都需要用新空间的题,数组按照操作数开大小,没给初始序列开。[TJOI2019]甲苯先生的滚榜

  3. 两段差不多的代码,直接粘贴过去用,没改全炸了。

  4. splay中如果存在多个值一样的点,随便找一个转到根之后,剩下的不全在左子树!!!!!!!

  5. 都知道无向图数组要开二倍,然而,和无向图边有关的数组都要开二倍!!!!!!!!!!!求割边,挂了,有什么好说的…

  6. 函数有个参数是bool,表示类型,传了个int进去,1/-1,GG。

  7. Splay板子打错两行泪T_T

  8. 这两句不一样!!!FFT的泪水

ans += A[i].x / lim + 0.5;
ans += (int)(A[i].x / lim + 0.5);
  1. 线段树不pushdown

  2. 分类讨论不完全。。。直接变最低档暴力分,太丢人了

  3. 不算内存见祖宗,这个已经114514次了…MDZZ

  4. diff a.out b.out -wZB !!!!!

  5. 高斯小圆卡顺序:随机化

  6. 算空间算错(指算大感觉MLE不写了)

  7. 欧拉回路 和边有关开二倍

  8. SAM p,np,q,nq分不清 小数据经常能过

  9. 写FFT,DFT共轭复数,要求j = i ? lim – i : 0。写了j = (L – i) & (L – 1)而不是j = (lim – i) & (lim – 1)调半小时

  10. FFT,求exp,注意别求Lim求的炸掉边界。。。

  11. 看题不仔细。。。输入是整数yy小数做法 必须选数字yy了不选的做法,etc……….

  12. [0,n-1]标号的图做dfs,初始fa不能是0。。。。。

  13. 把x,y用一个数存,x * 10 + y,然后x应该是0-9不能是1-10。。。

  14. 结构体里的构造函数,直接调用并没有什么用,会生成新数组,不能用来初始化现在的数组

  15. 极角排序,能用叉积就不要用atan2,被卡爆

bool operator<(const Node &x, const Node &y) {
  int a = x.dx < 0 || x.dx == 0 && x.dy < 0,
    b = y.dx < 0 || y.dx == 0 && y.dy < 0;
  if (a != b) return a < b;
  return cross(x, y) > 0;
}
  1. 双指针扫可以绕圈的环形的时候,注意有没有绕圈次数过多(比如第二个指针在第一个指针前面,结果每次判断如果第二个小于第一个就等于第一个这种睿智操作。。。

  2. 使用A[i] != A[i + 1]计数的时候,如果多测,记得单独设置A[n + 1]

  3. 某仙人掌板子题,环上DP,需要两种方向绕环,写的是1->n与1->n->2,第二种算两点距离挂了

  4. 某FFT题,FFT过程中要用到fac[n],统计答案的时候只用到fac[m],于是阶乘就没算更大的。。。这个故事告诉我,阶乘这种东西,数组开多大算多大。。。。。。。。

  5. 记一个小Trick:优化两数相加取模的速度:

x -= P, x += x >> 31 & P;
  1. 当需要维护一条链,要求不在链上的子树的内容,一个优秀的做法是在x维护x父亲去掉x的答案。一个愚蠢的做法是树剖+处理链。。。。后者特别难写。。。

  2. 设计一个单调性类的DP,当点j的意义是f[j-1]+S(j)的时候,别忘了i可以从f[i-1]转移来,也就是要额外用自己算一下自己

  3. 分治FFT,从序列开始选一段,从l开始选一段。注意是要求的那个从l开始选,一开始就有的从0开始选!!

  4. 2SAT直接用线段树式的开点法(2x,2x+1),并封装addedge()一次性加正反边是很优秀的做法。

  5. 关于std::swap的复杂度:

swap 数组是O(数组长度的)
swap std::set是O(1)的
在c++11后,所有常用的STL里的都是O(1)

  1. 启发式合并维护链并:注意合并的时候,一条一条加入,并且直接计算新的贡献(旧的它死了)

  2. 注意二维前缀和的正确写法……

  3. 论如何卡启发式合并常数:二叉树

  4. 当你发现数据范围和平常的差不多,但是又多了一点的时候:冷静一下是不是你想到的做法会正好被卡掉(指省选D2T2,2^20

  5. 计算复杂度的时候,要把减枝剪掉的也算进去。