洛谷P1190 [NOIP2010 普及组] 接水问题

题目描述

学校里有一个水房,水房里一共装有 mm 个龙头可供同学们打开水,每个龙头每秒钟的供水量相等,均为 11。

现在有 nn 名同学准备接水,他们的初始接水顺序已经确定。将这些同学按接水顺序从 11 到 nn 编号,ii 号同学的接水量为 wiw_i。接水开始时,11 到 mm 号同学各占一个水龙头,并同时打开水龙头接水。当其中某名同学 jj 完成其接水量要求 wjw_j 后,下一名排队等候接水的同学 kk 马上接替 jj 同学的位置开始接水。这个换人的过程是瞬间完成的,且没有任何水的浪费。即 jj 同学第 xx 秒结束时完成接水,则 kk 同学第 x+1x+1 秒立刻开始接水。若当前接水人数 n′n' 不足 mm,则只有 n′n' 个龙头供水,其它 m−n′m - n' 个龙头关闭。

现在给出 nn 名同学的接水量,按照上述接水规则,问所有同学都接完水需要多少秒。

输入格式

第一行两个整数 nn 和 mm,用一个空格隔开,分别表示接水人数和龙头个数。

第二行 nn 个整数 w1,w2,…,wnw_1,w_2,\ldots,w_n,每两个整数之间用一个空格隔开,wiw_i 表示 ii 号同学的接水量。

输出格式

一个整数,表示接水所需的总时间。

样例 #1

样例输入 #1

5 3
4 4 1 2 1

样例输出 #1

4

样例 #2

样例输入 #2

8 4
23 71 87 32 70 93 80 76

样例输出 #2

163

提示

【输入输出样例 #1 说明】

第 11 秒,33 人接水。第 11 秒结束时,1,2,31,2,3 号同学每人的已接水量为 1,31,3 号同学接完水,44 号同学接替 33 号同学开始接水。

第 22 秒,33 人接水。第 22 秒结束时,1,21,2 号同学每人的已接水量为 2,42,4 号同学的已接水量为 11。

第 33 秒,33 人接水。第 33 秒结束时,1,21,2 号同学每人的已接水量为 3,43,4 号同学的已接水量为 22。44 号同学接完水,55 号同学接替 44 号同学开始接水。

第 44 秒,33 人接水。第 44 秒结束时,1,21,2 号同学每人的已接水量为 4,54,5 号同学的已接水量为 11。1,2,51,2,5 号同学接完水,即所有人完成接水的总接水时间为 44 秒。

【数据范围】

1≤n≤1041 \le n \le {10}^4,1≤m≤1001 \le m \le 100,m≤nm \le n;

1≤wi≤1001 \le w_i \le 100。

题解

#include<bits/stdc++.h>
using namespace std;

int m,n,num,w[10086],ans;

int main() {
	cin>>n>>m;
	for (int i=1; i<=n; i++) {
		cin>>w[i];
	}
	num=m+1;
	while (num<=n+m) {
		for (int i=1; i<=m; i++) {
			w[i]--;
			if (w[i]==0) {
				w[i]=w[num];
				num++;
			}
		}
		ans++;
	}
	cout<<ans;
	return 0;
}