坑!

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

  • 建凸包要以縱座標爲第二關鍵字排序。
相關文章
相關標籤/搜索