zoukankan      html  css  js  c++  java
  • 坑!

    2018.2.28

    • excrt合并模线性方程的时候,解不定方程得到的$x$,一定要弄小,否则容易在乘的过程中炸掉long long

    2018.3.2

    • 线性基取最大异或和的时候不一定包含所有基向量,而是回代后,所有数的异或和。

    2018.3.4

    • 数组一定不能开小。读写未被分配的内存会发生奇怪的事情。比如在I/O中莫名奇妙Runtime Error

    2018.3.5

    •  signed 是 signed int 的简写。
    • dinic的dfs中, (f = dfs(eu, min(minf, g[i].cap - g[i].f)) > 0) 是错误写法,正确的写法应该加上一组括号 ((f = dfs(eu, min(minf, g[i].cap - g[i].f))) > 0) 

    2018.3.6

    • 要分清 for 的是$n$还是$m$。

    2018.3.22

    •  memset 一个 boolean 数组不要写成 sizeof(int) 

    2018.4.6

    • 进考场的时候一定要核对机子的时间是否正确。被坑1小时的惨痛教训。

    2018.5.10

    • 对负数进行“质因数”分解时注意绝对值。

    2018.6.30

    • 线性基回代的时先处理低位。

    2018.7.14

    • 二分的时候边界一定不要小了
    • OJ上交题注意不要交错程序

    2018.8.2

    • 后缀自动机的空间要开两倍
    • OI赛制记得跑极限数据检查边界问题。

    2018.8.22

    • 倍增取路径上的信息的时候,最终的向上跳的一步记得是拿两条边更新。
    • 欧拉回路不一定经过所有点,而是所有边。
    • 做完一题拍一题。 100 >= 100 * Math.random() (暴力不好写除外,但要用特殊数据检验。所以NOIP 3个半小时可难了)
    • 对拍时记得  srand((unsigned) time (NULL)) 
    • 考场上不要理会别人敲代码的声音,假装他们都在敲假算法,会爆零。(虽然实际上他们可能ak了)

    2018.9.25

    • 多项式求逆元两倍空间,多项式开根两倍空间。
    • 多项式开根,求逆前记得清空数组
    • 多项式开根,在求模$x^{n}$的意义下求逆元。

    2018.9.29

    • 多项式操操作记得清数组,确保不会挂掉

    2018.10.9

    • 动态插入凸包不能求最远点对

    2018.10.17

    • 题读三遍,样例仔细看
    • Splay每个操作完成后检查是否执行splay操作,确保均摊没有假掉。

    2018.10.19

    • 注意LCT的link操作的时候不要连接反了了,被makeroot的那个点连向另一点
    • pushDown时更新标记的情况下,上传的时候注意左右子树的标记有没有清掉

    2018.10.20

    • 记得跑极限数据检查边界、常数、时间复杂度是否假掉、空间。

    2018.11.5

    • 常备份源代码。

    2018.12.8

    • 有$n$个点,不意味着暴力枚举与一个点相邻的点至多会枚举到$n - 1$个点。

    2018.12.11

    • 需要分配标号时,$p_l p_r$需要考虑总方案数是否被正确计算。

    2019.1.4

    • Tarjan 的 $low$ 不能乱改。

    2019.2.17

    • NTT注意模数的两个地方:
      • 是否存在原根
      • $varphi(p)$的2倍数的因子是否足够大
    • 非常降智的错误↓
       1 template <const int Mod = :: Mod>
       2 class Z {
       3     public:
       4         int v;
       5 
       6         Z() : v(0) {    }
       7         Z(int x) : v(x){    }
       8         Z(ll x) : v(x % Mod) {    }
       9 
      10         Z operator + (Z b) {
      11             return Z(((v += b.v) >= Mod) ? (v - Mod) : (v));
      12         }
      13         Z operator - (Z b) {
      14             return Z(((v -= b.v) < 0) ? (v + Mod) : (v));
      15         }
      16         Z operator * (Z b) {
      17             return Z(v * 1ll * b.v);
      18         }
      19         Z operator ~() {
      20             return inv(v, Mod);
      21         }
      22         Z operator - () {
      23             return Z(0) - *this;
      24         }
      25 };

    2019.3.6

    • 左移和右移运算中,偏移量不要超过位数-1.

    2019.3.10

    • 树链剖分求lca比较的是链顶的深度

    2019.4.23

    • 当方点只维护其儿子的信息时,主要它的父节点的信息。
    • 分清有向边和无向边。

    2019.4.27

    • 请手动类型检查:
      #include <bits/stdc++.h>
      using namespace std;
      typedef bool boolean;
      
      multiset<int> S;
      
      int main() {
        // ......
        S.upper_bound(1000000000000ll);
        return 0;
      }

    2019.5.7

    • 最小生成环套树森林的并查集正确判断方法:
      boolean check(int x, int y) {
        x = find(x), y = find(y);
        if (req == 1)
          return x ^ y;
        return !cir[x] || !cir[y];
      }

    2019.6.11

    • 建凸包要以纵坐标为第二关键字排序。

    2019.7.31

    • 求原根的时候记得判互素

    2019.8.16

    • 记得检查数据分治有没有写挂
    • AC自动机向fail或从fail累加东西的时候别直接降智遍历pool。

    2019.8.29

    • scanf解析非常慢,即使作为int读入7e6个1
    • 费用流多路增广当前弧优化不能丢,最好加vis标记,以及判断当前剩余流量为0时break

    2019.9.24

    • 用不直接求出逆元的BSGS,记得最大要与处理到周期 + 块大小

    2019.10.16

    • 两个数相乘的时候注意会不会越界。
    • 获得更大范围的随机数生成器的错误写法:

      int rand() {
        return ::rand() << 15 | ::rand();
      }
      

      正确写法:

      int rand() {
        const static unsigned msk = (1u << 30) - 1;
        return ((::rand() << 15) ^ ::rand()) & msk;
      }
    • 使用滚动数组请检查数组大小。

    2019.10.20

    • 下发交互库可能啥也没有判,记得手动加上不合法的判断

    2019.10.21

    • $pm 10^9$ 记得检查是否爆 int

    2019.11.5

    • 要相信大样例没有你随手滚键盘得到的数据强,因为大样例可能是精心构造过的。

    2019.11.14

    • 注意模数。
    • 留意是否有重边。
    • 留意答案的边界(最小,最大)
    • 请找出下面代码的若干处错误:
      int rank(int x) {
        Node* p = rt;
        int rt = 0;
        while (p) {
          if (p->v > x) {
            p = p->l;
          } else {
            rt += ((p->l) ? (p->l->sz) : 0);
            p = p->r;
          }
        }
        return rt + 1;
      }
      

    2019.11.22

    • 造极限数据不要偷懒。标号该随机就随机,众所周知,数组随机下标访问慢得要死。

    2019.11.24

    • 不好写暴力检验的时候,如果题目的输入与顺序无关,可以通过调换顺序来检验。
    • 分类讨论每一种 case 最好都检验一下

    2019.11.25

    • 小心一些奇怪的模数或者模数范围,比如 $1.1 imes 10^9$

    2019.11.28

    • 为什么我过对拍了还是 WA,常见原因:
      class rnd {
        public:
          rnd() {
      //    srand((unsigned) time (NULL));
          }
      // ......
      } rnd;

    2019.12.10

    • 整型最小的负数的绝对值比最大的正数大一

    2020.2.4

    • 带权并查集查值的时候要先 find
    • 带权并查集 find 的时候返回的是根,不要写成旧的父节点

    2020.2.19

    • $left lfloor frac{x + b}{a} ight floor$  当 $a$ 比较大的时候可能有 2 种取值。

    2020.2.25

    • 长度为 $n$ 的串的子串个数比 $frac{n(n - 1)}{2}$ 多
    • LCT 维护信息的时候记得信息上传

    2020.3.2

    • 赋初值的时候记得检查是否合理
    • 线段树节点值初始化最好在新建节点的时候进行。以防在区间加区间 $max$ 线段树中出现类型为 long long 的值初始化为 -INT_MAX
    • 不太会写的题 $approx$ 不会

    2020.3.11

    • 凸优化注意三点共线的情况,即写的时候看一下最终的斜率是不是答案缩在线段的斜率
    • 极角排序注意跨过 $x$ 负半轴的部分。
    • 一定要进行边界检查(是否该用 long long 之类的)

    2020.3.16

    • 计算几何题值域较大的时候注意精度以及点积叉积会不会炸 long long
    • 极角序扫描线初值注意算入在 $x$ 轴负半轴的事件。
    • border 分成等差数列求 fail 每一组要判两次。
    • 比赛时不要手动取模,真的太容易打漏了。

    2020.3.25

    • 边界问题
      • 整型类:是否会爆 int, long long
      • 数据结构类:查询的边界情况,如会不会超出线段树的 $n$,以及平衡树的空指针问题
      • 初值类:是否足够大或足够小
    • 写 Splay 注意任何 O (depth) 的操作完都要 splay,尽量除了 lct 都不写 splay

    2020.4.5

    • 边界问题:预处理的范围是否够大
    • 每日一憨
      void push_up() {
        if (l->mx == r->mx) {
          mx = l->mx;
          mx2 = max(l->mx2, r->mx2);
        } else {
          mx = max(l->mx, r->mx);
          mx2 = min(l->mx, r->mx);
        }
      }

    2020.4.9

    • multiset 和 set

    2020.5.10

    • min25 筛第一部分需要保证每个位置不会被计算多次,比如下面的写法是错误的:
      int p = pri[i];
      for (int j = 1, v; j < D && p < range[v = n / j]; j++) {
        f0[v] -= f0[v / p] - f0[p - 1];
        f1[v] -= (f1[v / p] - f1[p - 1]) * p;
      }
      for (int j = D; p < range[--j]; ) {
        f0[j] -= f0[j / p] - f0[p - 1];
        f1[j] -= (f1[j / p] - f1[p - 1]) * p;
      }
    • min25 筛第二部分注意当 $S(n,m)$,即使 $p_m^2 > n$ 也是可能有值的

    2020.5.16

    • 注意 __builtin_popcount(t) 和 __builtin_popcountll(t)

    2020.5.19

    • 不要有多余输出,比如 puts("No") 完了忘记退出程序

    2020.5.26

    • const int N = 200;

    2020.5.29

    • 有一些越界可能只会 wa 不会 re,需要手动检查
    • 分块题对拍前注意块大小
    • const int N = 1e5 + 5;
      
      int comb[N][21]
      
      comb[i][0] = comb[i][i] = 1;

    2020.6.10

    • xx.size() 在某些机子上是 32 位整型
    • 区分射线和直线

    2020.6.13

    • 注意离散化后形成的空区间

    2020.6.17

    • 多项式取模注意边界

    2020.7.5

    • 注意验证算法
    • 注意一些正反的边界
    • 注意调试语句要删干净

    2020.7.10

    • Zi qpow(Zi a, int p) {
        if (p < 0)
          p += Mod - 1;
        Zi rt = 1;
        for ( ; p; p >>= 1, a *= a) {
          if (p & 1) {
            rt *= a;
          }
        }
        return rt;
      }
      Zi qpow(Zi a, ll p) {
        return qpow(a, p % (Mod - 1));
      }
      
    • const int Mod = 1.1e9;
      
      int add(int a, int b) {
        ll x;
        return ((x = a + b) >= Mod) ? (x - Mod) : x;
      }
      

    2020.7.20

    • DFT 使用模意义下原根的注意 $frac{1}{w_n^k - 1}$ 在模意义下是否存在。
  • 相关阅读:
    获取桌面路径
    Winform判断一个窗口是否以模态化方式打开
    Winform弹出子窗体
    Winform 窗体传值 利用委托 子窗体传值给父窗体
    GridView中小的应用
    GridView显示水平滚动条
    GridView中常用属性的设置
    将DevExpress GridView中的数据原样导出到Excel中
    DevExpress 16.2如何汉化
    C#使用NPOI导出Excel
  • 原文地址:https://www.cnblogs.com/yyf0309/p/8482115.html
Copyright © 2011-2022 走看看