做題經驗總結

hzy_____l發表於2024-03-26

最近調資料結構自閉了,準備總結一些不常見但很有用的操作。

  1. 將資料結構封存在結構體內。

這樣可以讓程式碼結構清晰一些,更好查錯。

  1. 使用 devc++ 切換編譯器。

只用開啟‘工具’,‘編譯選項’,輸入 -std=c++11 就行了。

  1. 常用的程式碼可以用 define 宏定義。

同樣是簡化程式碼。如線段樹可以這樣:

#define lc(x) x<<1
#define rc(x) x<<1|1
  1. 極域殺手下載後需要給 .exe 檔案重新命名才能用。

  2. 樹的最小支配集 $=$ 全集 $-$ 最大獨立集。

  3. 如果函式型別不是 void ,必須有返回,否則會 RE。

  4. WA 和 MLE 都有可能是陣列開太小造成的。

  5. 隨機函式不要用 $rand()$ ,要用這個:

mt19937_64 rng(time(NULL));
  1. 暴力程式碼可以分資料範圍處理,有時可以“不可以總司令”

  2. 暴力演算法可以利用 clock() 來卡時。

  3. 造資料 的資料時,要造菊花圖,鏈,二叉樹的情況。

  4. 有時 $sort$ 會被卡,可以用 stable_sort。

  5. c++98 比 c++11快。

  6. 函式使用類似 f(const int a) 會更快。

  7. 莫隊塊長實際應為 $n/ \sqrt m$ 。

  8. 二位偏序時排序要判兩個關鍵字

  9. 矩陣快速冪注意列舉順序,按 i,k,j 來列舉

  10. dinic 有時用 vector 更快,因為記憶體是連續的。

  11. 矩陣快速冪最佳化 dp 時,如果是多測,可以預處理出轉移矩陣的 $2^i$ 次方。

  12. $\gcd(0,n)=n$ 。