openjudge 1.9.15 接水问题

OpenJudge - 15:接水问题


解题思路:

1.由题可知,需要计算总的排队接水时间,有n个同学接水,有m个水龙头,因为每个同学的接水时间时不一样的,所以我们可以利用数组来存储每个学生的接水时间,n的范围是10000,所以开一个10005大小的数组即可

2.然后利用循环,将n个同学各自的接水时间存入数组,此时对数组开始进行数据处理

3.首先分析,如果n<=m的话,意思为水龙头是够用的,而且水龙头同时开的话,接水量最多的那个同学是用时最长的,所以接水时间,就是数组中最大的那个数

4.如果n>m的话,意思有替补学生,必须等其他学生接完水后,才可以去接水,所以我们可以设置一个书签k=m+1,来标记后面排队学生的位置,可以确定前m个学生是可以同时接水的,所以,第一个接完水的是接水量最少的那个同学,那么我们可以在数组1-m的位置找出那个最小值min,即为最快接完水的时间sum=sum+min,然后对这个m个数据进行处理,如果数字为min,那么这个学生i就是接完水的,下一个等待的学生要替补过来,即a[i]=a[k],进行赋值,并且书签往后移动,下一次就是第二个替补的学生去接水,k++,其他的学生接水量减去min,意思他们还没接完,但是已经接了min的水了,直到后面所有的排队学生都已经在水龙头面前了,那就又回到了第3步,只需要找到最大的那个值max,然后累加到计时器里即可sum=sum+max


#include
using namespace std;
int a[10005];//定义一维数组存放数据 
int main()
{int n,m;cin>>n>>m;for(int i=1;i<=n;i++)cin>>a[i];//将n个数据输入到一维数组中 int k=m+1,sum=0;while(kmax)max=a[i];}sum=sum+max;//累加器加上最后一轮的时间 cout<


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部