杭电OJ 1103(C++)
程序员文章站
2022-07-13 17:38:24
...
#include <iostream>
#include <queue>
#include <functional>
#include <string>
#include <algorithm>
using namespace std;
int a, b, c; //2人、4人、6人桌数量
int deskNum, time, people, ans; //使用桌子种类,到达时间,人数,最终输出
string s;
int main()
{
while (cin >> a >> b >> c)
{
if (a + b + c == 0)
break;
ans = 0;
//3种桌子的优先队列,按照到达时间从小到大排序
priority_queue<int, vector<int>, greater<int> > p[3];
//初始化3种桌子的优先队列
for (int i = 0; i < a; i++) p[0].push(0);
for (int i = 0; i < b; i++) p[1].push(0);
for (int i = 0; i < c; i++) p[2].push(0);
while (cin >> s)
{
if (s[0] == '#')
break;
//将到达时间转换为分钟
time = 600 * s[0] + 60 * s[1] + 10 * s[3] + s[4] - '0' * 671;
cin >> people;
deskNum = (people - 1) / 2;
int q = p[deskNum].top(); //此类桌子客人的最早离开时间
if (q <= time + 30) //等待时间在30分钟以内
{
q = max(q, time) + 30; //当前客人预计离开时间
if (q <= 23 * 60) //离开时间在23点之前
{
p[deskNum].pop();
p[deskNum].push(q);
ans += people;
}
}
}
cout << ans << endl;
}
}
上一篇: 杭电OJ 1104(C++)
下一篇: GitHub关联本地仓库