警示后人

警示后人

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];

所以定义合适的空间很重要!要养成良好的代码习惯!

posted @ 2024-07-20 23:12  superl61  阅读(13)  评论(0)    收藏  举报