讨论 / 模拟做法
xihb183 2019-08-25 21:05:04
点我顶贴 收藏 删除
#include<iostream>

#include<cstdio>

using namespace std;

int w[10001] = {0}; //第i个同学需水量,编号从1开始

int longtou[101] = {0}; //龙头:拼音long tou。记录1~100个龙头前学生还需要接多少水,longtou[i] == 0说明龙头前没有人接水,龙头空闲了。

bool have_longtou_used(int m) { //其实这个函数可以通过一个记录有多少个龙头的变量来提高运行效率。但是对性能要求没那么高时这么写更方便直接。

for (int i = 1; i <= m; i++) {

if (longtou[i] > 0)

return true;

}

return false;

}

int main()

{

int m; //m 个龙头, 1 ≤ m ≤ 100, m ≤ n

int n; //n 名同学:编号1~n。 1 ≤ n ≤ 10000

int time = 0; //已经接水时间

int wait_stu_1 = 1; //排队学生中的第一个学生。

cin >> n >> m;

for (int i = 1; i <= n; i++) {

cin >> w[i];

}

while (wait_stu_1 <= n || have_longtou_used(m)) { //还有人在排队,或者水龙头处还有人在接水。每次循环时间过1秒。

time++;

for (int i = 1; i <= m; i++) { //逐个遍历每个水龙头,

if(longtou[i] == 0) { //如果龙头前没人接水,空闲了

if(wait_stu_1 <= n) { //如果还有人需要接水,分配人过来接水

longtou[i] = w[wait_stu_1];

wait_stu_1++;

longtou[i]--;

}

} else {

longtou[i]--;

}

}

}

cout << time;

}

查看更多回复
提交回复