90分求助!

P1190 [NOIP2010 普及组] 接水问题

@[Grace25](/user/359883) ``` int w[11000]; => int w[11000] = {0}; ``` 或者将w声明为全局变量,自动置零。为什么这样就可以AC,原因您自己揣摩啊,与您的代码密切相关。提示: ``` for(int i=1;i<=m;i++){ w[i]--; if(w[i] == 0){ w[i]=w[next]; next++; } } ```
by metaphysis @ 2020-09-16 20:36:59


@[metaphysis](/user/333388) 保证next=n+m+1时m[i]=0?
by Grace25 @ 2020-09-16 20:47:29


@[Grace25](/user/359883) 像您最开始那样写,w是一个局部变量,编译器可能并未进行初始化,使得数组中的元素值是不确定的,而您的代码中,有可能引用超出下标n的元素,由于该元素的值不确定,就可能导致程序出现错误的结果。 如果您在最开始全部置零,就能消除这种可能,使得结果是正确的。不过像您这样写,是很容易引起Bug的,如果代码超过100行,自己将非常难排查。
by metaphysis @ 2020-09-16 20:55:10


|