#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<algorithm>
#include<functional>
#include<queue>
#include<deque>
#include<string>
#define MAX 1005
#define WIN 23
using namespace std;
struct customer {
int Id;
string serveTime;
string leaveTime;
customer(int _id = 0, string _serveTime = "", string _leaveTime = "") :Id(_id), serveTime(_serveTime), leaveTime(_leaveTime) {}
};
void ScanArray(int Array[], int Number);
string TimeAdd(string nowTime, int processTime);
int main() {
freopen("D://input.txt", "r", stdin);
int windowNumber, maxCapacity, customerNumber, queryNumber, i, j;
int index, earlyIndex;
int processTime[MAX], queryId[MAX]; //customers are numbered from 1 to k
string openTime = "08:00", closeTime = "17:00", temp, earlist, status[MAX];
deque<customer> Queue[WIN];
cin >> windowNumber >> maxCapacity >> customerNumber >> queryNumber;
ScanArray(processTime, customerNumber);
ScanArray(queryId, queryNumber);
for (i = 1; i <= maxCapacity * windowNumber&&i <= customerNumber; i++) {
index = i % windowNumber;
if (index == 0)
index += windowNumber;
if (Queue[index].size() == 0)
temp = openTime;
else
temp = status[Queue[index].back().Id];
status[i] = TimeAdd(temp, processTime[i]);
Queue[index].push_back(customer(i, temp, status[i]));
}
for (i = maxCapacity * windowNumber + 1; i <= customerNumber; i++) {
earlyIndex = 0;
earlist = "23:59";
for (j = 1; j <= windowNumber; j++) {
if (!Queue[j].empty() && Queue[j].front().leaveTime < earlist) {
earlist = Queue[j].front().leaveTime;
earlyIndex = j;
// earlyIndex = Queue[j].front().Id;
}
}
/*if (earlyIndex != 0) {
temp = status[Queue[earlyIndex].back().Id];
status[i] = TimeAdd(temp, processTime[i]);
Queue[earlyIndex].push_back(customer(i, temp, status[i]));
Queue[earlyIndex].pop_front();
}
else {
status[i] = "Sorry";
}*/
temp = status[Queue[earlyIndex].back().Id];
status[i] = TimeAdd(temp, processTime[i]);
Queue[earlyIndex].push_back(customer(i, temp, status[i]));
Queue[earlyIndex].pop_front();
}
for (i = 1; i <= queryNumber; i++) {
cout << status[queryId[i]] << endl;
}
return 0;
}
void ScanArray(int Array[], int Number) {
int i;
Array[0] = 0;
for (i = 1; i <= Number; i++) {
cin >> Array[i];
}
return;
}
string TimeAdd(string nowTime, int processTime) {
string ret;
int hour, minute, sumMinute;
string _hour, _minute;
if (nowTime == "Sorry" || nowTime >= "17:00")
ret = "Sorry";
else {
hour = (nowTime[0] - '0') * 10 + (nowTime[1] - '0');
minute = (nowTime[3] - '0') * 10 + (nowTime[4] - '0');
sumMinute = hour * 60 + minute;
sumMinute += processTime;
hour = sumMinute / 60;
minute = sumMinute % 60;
_hour = to_string(hour);
if (hour < 10 && hour >0)
_hour = "0" + _hour;
else if (hour == 0)
_hour = "00";
_minute = to_string(minute);
if (minute < 10 && minute>0)
_minute = "0" + _minute;
else if (minute == 0)
_minute = "00";
ret = _hour + ":" + _minute;
}
return ret;
}
1014. Waiting in Line
最新推荐文章于 2024-04-23 17:00:35 发布