警示後人
1.陣列空間要定義合適:不要追求剛剛好,也不要盲目開大很多,都容易RE,很蠢。
比如下面這段程式碼,是做“小島探險”時發現的:
int sx[2],sy[2],num=0,tx,ty;
inline void dfs(int x,int y ,char col){
...
if(!pd || (pd==1 && x==tx && y==ty)) sx[num]=x,sy[num]=y,++num;
}
此處的sx[],sy[],num
本來是用來找河流兩個端點的,但由於題中還有另一種連通塊(冰川),一併使用了這個dfs,導致sx[],sy[]
訪問越界,導致的錯誤也很離奇:圖的邊長 \(n\) 發生了改變。
再比如CSPS-2023 T2 , 當初自己想做 \(n \leq 800\) 的部分分,結果如下定義,成功G掉10分
const int N=800;
int f[N][N];
所以定義合適的空間很重要!要養成良好的程式碼習慣!