首先,只用所有水龙头需接水量为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