题目
思路
数据范围比较小,模拟一秒一秒的接水。
用1个数组存储每个水龙头正在接水的人还需要接几秒,每次所有在接水的水龙头秒数减1,某个水龙头的人接完水之后,下一个立刻补上。
代码
#include<stdio.h>
int a[10001],b[101];//b 水龙头
int main()
{
int n,m,i;
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i) scanf("%d",&a[i]);
for(i=1;i<=m;++i) b[i]=a[i]; //前m个人先接
int t=m+1,tag,tot=0;
//t:下一个要去接的是谁 tag:标记是否所有人接完水了 tot:总时间
while(1)
{
tag=0;
for(i=1;i<=m;++i) //每个有人接水的水龙头接水时间减1
if(b[i]) //这个水龙头有人在接水
{
tag=1;// tag=1,还没有结束
b[i]--;
if(!b[i] && t<=n) b[i]=a[t++];
//在这里接水的人接完了,而且后面还有人在等待接水,后面的补上
// t++ : 先把t用了,在让t加1 这里相当于:b[i]=a[t],t++
}
if(!tag) break;//所有人接完水了,结束
tot++;//总时间时间加1
}
printf("%d",tot);
return 0;
}