南沙C++信奧賽陳老師解一本通題 1950:【10NOIP普及組】接水問題

南沙区信奥赛陈老师發表於2024-10-11

【題目描述】

學校裡有一個水房,水房裡一共裝有m個龍頭可供同學們開啟水,每個龍頭每秒鐘的供水量相等,均為1。

現在有n 名同學準備接水,他們的初始接水順序已經確定。將這些同學按接水順序從1到n 編號,i號同學的接水量為w。接水開始時,1 到m 號同學各佔一個水龍頭,並同時開啟水龍頭接水。當其中某名同學jj 完成其接水量要求wj後,下一名排隊等候接水的同學k馬上接替jj 同學的位置開始接水。這個換人的過程是瞬間完成的,且沒有任何水的浪費。即jj 同學第x秒結束時完成接水,則kk 同學第x+1x+1 秒立刻開始接水。若當前接水人數n′不足m,則只有n′個龍頭供水,其它m−n′個龍頭關閉。

現在給出nn 名同學的接水量,按照上述接水規則,問所有同學都接完水需要多少秒。

【輸入】

第1 行2 個整數n和m,用一個空格隔開,分別表示接水人數和龍頭個數。

第2 行n 個整數w1、w2、……、wn,每兩個整數之間用一個空格隔開,wi 表示i 號同學的接水量。

【輸出】

只有一行,11 個整數,表示接水所需的總時間。

【輸入樣例】

5 3
4 4 1 2 1

【輸出樣例】

4

【提示】

【輸入輸出樣例說明】

第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 秒。

【輸入輸出樣例2】

輸入:

8 4
23 71 87 32 70 93 80 76

輸出:

163

【資料範圍】

1≤n≤10000,1≤m≤100且m≤n1≤n≤10000,1≤m≤100且m≤n;

1≤wi≤1001≤wi≤100。

#include <bits/stdc++.h>
using namespace std;
int a[101],n,m;
long long ans=0;
void calAndPush(int t)
{
	sort(a+1,a+m+1);
	for(int i=2;i<=m;i++)
			a[i]=a[i]-a[1];
	ans+=a[1];
	a[1]=t; 
}
int main()
{
	cin>>n>>m; 
	for(int i=1;i<=m;i++)
		cin>>a[i];
	for(int i=m+1;i<=n;i++)
	{
		cin>>a[i];
		calAndPush(a[i]);
	}
	int maxv=0;
	for(int i=1;i<=m;i++)
		if(a[i]>maxv)
			maxv=a[i];
	ans+=maxv;
	cout<<ans;
	return 0;
}
南沙C++信奧賽陳老師解一本通題  1950:【10NOIP普及組】接水問題

相關文章