本文主要是介绍Problem 1197 # 共享厕所,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题描述
马路边有一个共享厕所,厕所里一共装有m 个马桶可供人们拉尿,每个人每秒钟的拉尿量相等,均为1。 现在有n 个人准备拉尿,他们的初始拉尿顺序已经确定。将这些人按拉尿顺序从1 到n编号,i 号同学的拉尿量为ai。拉尿开始时,1 到m 号人各占一个马桶,并同时开始拉尿。当其中某个人j 完成其拉尿量要求aj 后,下一名排队等候拉尿的人x马上接替j人的位置开始拉尿。这个换人的过程是瞬间完成的。即第j人第k秒结束时完成拉尿,则第x人第k+1 秒立刻开始拉尿。若当前拉尿人数n’不足m, 则只有n’个马桶供使用,其它m-n’个马桶关闭。 现在给出n 名人的拉尿量,按照上述拉尿规则,问所有人都拉完尿需要多少秒。
输入
第1 行是n 和m,分别表示拉尿人数和马桶个数。
第2 行n 个整数a1、a2、……、an,ai 表示i 号同 学的拉尿量。
输出
输出结果表示拉尿所需的总时间,结果只占一行。
输入范例
5 3
4 4 1 2 1
8 4
23 71 87 32 70 93 80 76
输出范例
4
163
Hint
对于第一个样例:
第1 秒,3 人拉尿。第1 秒结束时,1、2、3 号人每人的已拉尿量为1,3 号人拉完尿,4 号人接替3 号人开始拉尿。
第2 秒,3 人拉尿。第2 秒结束时,1、2 号人每人的已拉尿量为2,4 号人的已拉尿量为1。
第3 秒,3 人拉尿。第3 秒结束时,1、2 号人每人的已拉尿量为3,4 号人的已拉尿量为2。4 号人拉完尿,5 号人接替4 号人开始拉尿。
第4 秒,3 人拉尿。第4 秒结束时,1、2 号人每人的已拉尿量为4,5 号人的已拉尿量为1。1、2、5 号人拉完尿,即所有人完成拉尿。
总拉尿时间为4 秒。
每遍历一次挑时间最短的填数,填完之后所用时间最长的厕所就是所求的时间
AC代码
#include<stdio.h>
#include<string.h>
#define MAX 500000
int a[MAX];
int m;
int n;
int time;
int find(int b)
{int min;int i;for(i=1,min=0;i<m;i++){if(a[min]>a[i]){min=i;}}return min;
}
int main()
{int i;int j;int c;int min;while(scanf("%d %d",&n,&m)!=EOF){a[0]=0;if(n>m){for(i=0;i<m;i++){scanf("%d",&a[i]);}for(j=0;j<n-m;j++){scanf("%d",&c);min=find(c);a[min]=a[min]+c;}for(i=1,time=a[0];i<m;i++){if(a[i]>time){time=a[i];}}}else{for(i=0;i<n;i++){scanf("%d",&a[i]);}for(i=1,time=a[0];i<n;i++){if(a[i]>time){time=a[i];}}}printf("%d\n",time);}return 0;
}
这篇关于Problem 1197 # 共享厕所的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!