警示后人
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];
所以定义合适的空间很重要!要养成良好的代码习惯!
标签:sy,sx,int,警示,后人,num,&& From: https://www.cnblogs.com/superl61/p/18313944