務虛
-
注意觀察題目中的性質,每一條性質都不是沒用的,都可能是問題的突破口

-
長的閱讀理解題,一定要耐着性子讀完,提取主干,也不要忽略細節

-
一定要記得靜態查錯!!有的時候花費數小時調的錯誤,很可能幾分鍾的靜態查錯就能解決

WA
-
取模優化/int取模
1ll*a+b,no 括號
-
memset 不能亂用,如果你的 sizeof 寫錯了, 可能會爆出隨機數

-
記得把
INF設到足夠大
-
記得 時刻取模 ,有減法時記得先
+mod再%mod, 如果有必要需要讀入后 立即取模
-
不要 盲目取模 ,尤其是計算 過程中 胡亂取模會 影響正確性 ,算完后最后 結果可以取模

-
注意 模數性質 ,是否為質數,數清楚有多少位,不要想當然

-
在 需要取模的快速冪 中,如果最后的 結果為
0記得加上一個mod,否則會出錯
-
在 快速冪 中, 傳參數記得類型 為
long long否則可能會 爆long long
-
重載運算符 時要注意,
this.a<t.a才是從小到大

-


-
指數不能直接取模!

-
快讀時記得處理負數

-
樹剖時記得分清楚第\(i\)個原數權值(
w),和按dfn順序的權值(nw)
-
線段樹
update或pushup或pushdown時,不能僅更新sum,應該更新全部信息,如min、max等
-
在 splay 的標記下傳過程中,一定要先判斷左右兒子是否存在,再對其翻轉標記異或 \(1\)

-
Floyd算法枚舉順序:
k,i,j
-
左移或右移的優先級比 \(+\) 或 \(-\) 的低,
&&比||的優先級高
-
左右移位默認的類型是
int, 記得轉換成long long再計算
-
\(1\) 默認類型是
int, 運算時記得轉換為1.0或1ll
-
矩陣快速冪時
res矩陣記得初始化, 使對角線為 \(1\)
-
移位的時候記得注意數據范圍,不要
-1>>1
-
輸出
float double時最好用printf("%f");,而不是long double的printf("%lf");
RE
-
開桶小心訪問負下標!!


-
線段樹開4倍空間

-
線段樹
pushdown時記得特判是否為葉子
-
DFS是樹根的父親盡量不要設成\(-1\),因為
fa[root]可能會在LCA中用到導致RE
-
樹狀數組記得特判
0的情況
-
分塊時,最后塊后面還要加一個右端點為
n+1的塊
-
n,m的范圍不代表數據范圍
-
用
ios::sync_with_stdio(false)后不要用scanf
-
多組數據重新建邊的時候記得清空 \(idx\)

-
更改了 \(\rm set\) 中元素后,小心迭代器 RE

-
\(\rm set\) 小心邊界,判
s.begin()和s.end()
-


TLE
-
不要隨便用SPFA,看清題目要求,是否有負邊權,是否是雙向邊,是否稠密或稀疏等

-
存圖時記得初始化
memset(h,-1,sizeof(h))
-
沒事別用
unordered_map,穩定 \({\rm O}(n)\) 警告
-
矩陣乘法循環順序:
i,k,j或者k,i,j
-
在 dfs 中的各種奇怪錯誤可能是由某個你不希望在下次搜索被更改的量, 被改動了, 因此一定要注意自己變量的作用域

-
刪除的時候要考慮鏈表優化,跳過沒用的(已經刪除的)!

-
\(\rm SPFA\) 判斷負環的時候只需要判當前路徑長度是否大於 \(n\)

CE
-
命名時避開
x1,y1,x2,y2這些系統關鍵字
-
切忌用
int a[10000000]={0};初始化大數組,否則會因為編譯文件過大暴死
UB
-
int類型的函數無返回值
-
訪問負下標

-
編譯選項開
-Wall有助於避免UB
-
-fsanitize=address, -fsanitize=signed-integer-overflow這些選項對UB和RE的排查都有幫助
高效做題
-
在遇到和逆元有關的題目時(比如求概率或期望),可以寫一份轉成
double的副本,可以提高調試效率
-
寫了
init就要初始化,別忘了用
-
模數為\(0\)或者除數為\(0\)都可能導致
RE
