为什么是0 分

P1190 [NOIP2010 普及组] 接水问题

首先,只用所有水龙头需接水量为0来判断**在水龙头只有一个的时候是会出错的**,一个人接完水就会输出结果了 并且,没必要给t赋值为m+1,赋值为m之后换人来接水的if语句中顺序调换成 ```cpp if(t<=n) { t++; b[j]=a[t]; } ``` 即可 综合上述两点,对于`if(o==m)`,应该加上条件所有人都正在接或者接完了水,即改为`if(o==m&&t==n+1)`。(其实直接把输出的判断和换人接水的放到一起应该也可以? 最后,输出完要结束循环,你原来的程序会一直循环下去。所以应该改成这样 ```cpp if(o==m&&t==n+1) { cout<<sum+1; break; } ``` **按理说**应该就没有问题了 但是我提交的时候第二个点过不了,很奇怪的是下载了数据之后**本地输出结果和答案是一样的(5063),但是提交上去就WA**...最后把数组开大十倍之后AC了,不知道是什么原因,希望有大佬能解答一下疑惑... 唔...这是用你的改完之后的AC代码,注释掉的可以忽略 ```cpp #include <iostream> using namespace std; int main() { int n,m,a[101000],b[110],sum=0,t,o;//a[i]表示第i人所需时间,b[i]表示第i个水龙头接水量 //freopen("P1190_2.in","r",stdin); cin>>n>>m; for(int i=1; i<=n; i++) cin>>a[i]; for(int i=1; i<=m; i++) b[i]=a[i]; t=m; for(int i=1;; i++) { o=0;//o表示多少个水龙头接水量为0 for(int j=1; j<=m; j++) { b[j]--; if(b[j]<=0) { o++; if(t<=n) { t++; b[j]=a[t]; } } //if(t>=9998) //printf("b[%d]:%d,o=%d,t=%d,sum=%d\n",j,b[j],o,t,sum); } if(o==m&&t==n+1)//所有水龙头需接水量为0时结束 { cout<<sum+1; break; } sum++; } //fclose(stdin); return 0; } ```
by Anamnesis @ 2021-04-08 23:30:14


@[Linking_](/user/392400) 啊 第一次在讨论区发言...不太熟悉排版规则,好像有的地方有点乱...应该影响不是很大吧
by Anamnesis @ 2021-04-08 23:32:37


@[Linking_](/user/392400) **太谢谢你了!!!** 你提到的问题我改了以后,发现还是错的。然后我看到```if(b[j]<=0)```,我判断的是等于,你判断的是小于等于。我这里也错了。
by halfmoon1 @ 2021-04-09 00:02:53


|