Input Specification:
Each input file contains one test case. Each case starts with a line containing 4 positive integers: N (≤20, number of windows), M (≤10, the maximum capacity of each line inside the yellow line), K (≤1000, number of customers), and Q (≤1000, number of customer queries).
The next line contains K positive integers, which are the processing time of the K customers.
The last line contains Q positive integers, which represent the customers who are asking about the time they can have their transactions done. The customers are numbered from 1 to K.
Output Specification:
For each of the Q customers, print in one line the time at which his/her transaction is finished, in the format HH:MM where HH is in [08, 17] and MM is in [00, 59]. Note that since the bank is closed everyday after 17:00, for those customers who cannot be served before 17:00, you must output Sorry instead.
Sample Input:
2 2 7 5
1 2 6 4 3 534 2
3 4 5 6 7
Sample Output:
08:07
08:06
08:10
17:00
Sorry
Note
- 时光机测试,题目还需重做
Code
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
struct node{
int poptiime, endtime;
queue<int> q;
};
int main(){
int n, m, k, q, index = 1;
scanf("%d%d%d%d", &n, &m, &k, &q);
vector<int> time(k+1), result(k+1);
for(int i = 1; i <= k; i++){
scanf("%d", &time[i]);
}
vector<node> window(n + 1);
vector<bool> sorry(k + 1, false);
for(int i = 1; i <= m; i++){
for(int j = 1; j <= n; j++){
if(index <= k){
window[j].q.push(time[index]);
if(window[j].endtime >= 540)
sorry[index] = true;
window[j].endtime += time[index];
if(i == 1)
window[j].poptiime = window[j].endtime;
result[index] = window[j].endtime;
index++;
}
}
}
while(index <= k){
int tempin = window[1].poptiime, tempwindow = 1;
for(int i = 2; i <= n; i++){
if(window[i].poptiime < tempin){
tempwindow = i;
tempin = window[i].poptiime;
}
}
window[tempwindow].q.pop();
window[tempwindow].q.push(time[index]);
window[tempwindow].poptiime += window[tempwindow].q.front();
if(window[tempwindow].endtime >= 540) sorry[index] = true;
window[tempwindow].endtime += time[index];
result[index] = window[tempwindow].endtime;
index++;
}
for(int i = 1; i <= q; i++){
int query, minute;
scanf("%d", &query);
minute = result[query];
if(sorry[query] == true){
printf("Sorry\n");
}else{
printf("%02d:%02d\n", (minute + 480) / 60, (minute + 480 ) % 60);
}
}
return 0;
}