题解 P1190 【接水问题】

看到楼下的大佬们发了一些排序、堆的题解,我看不懂堆的题解啊

于是我想到了另外一种方法:

读入n;

再读入n个整数(每个人的接水量);

然后,直接模拟!

首先,前m个人占领了所有水龙头;

然后,循环,接水量-1,时间+1;

如果有人接完了,下一个人开始。

AC代码(cpp):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <bits/stdc++.h>//万能头文件
using namespace std;
int n,m,w[10005],t,p;//n、m不解释,w数组是接水量
int main(){
ios::sync_with_stdio(false);//毫无意义的流优化
cin>>n>>m;//读入
for(int i=0;i<n;i++)cin>>w[i];//读入
p=m;//前m个人接水
while(p<=n){
for(int i=0;i<m;i++){
w[i]--;//接了一滴(什么水龙头)
if(!w[i])w[i]=w[p++];//没了,下一个!
}
t++;//时间++
}
for(int i=1;i<m;i++)if(w[i]>w[0])w[0]=w[i];//找剩下的最大值
cout<<t+w[0];//输出时间和没接完的水要的时间
return 0;//庄严地结束程序
}
你要抄就抄吧,反正洛谷的黑科技能查出来。