liuchuo / PAT

🍭 浙江大学PAT题解(C/C++/Java/Python) - 努力成为萌萌的程序媛~

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

【甲级1014另解】1014 Waiting in Line

rid-sun opened this issue · comments

#include<iostream>
#include<queue>
using namespace std;

int n, m, k, q, v[1005], mtime[25], vis[1005];
queue<int> line[25];

int main(){
    cin >> n >> m >> k >> q;
    for (int i = 1; i <= k;i++){
        cin >> v[i];
        if(i <= n * m){
            if(i % n == 0) line[n].push(i);
            else line[i % n].push(i);
        } 
    }
    int t = k > m * n ? m * n + 1 : k + 1;
    for (int i = 1; i <= 540;i++){
        for (int j = 1; j <= n;j++){
            if(!line[j].empty()){
                if(i == v[line[j].front()] + mtime[j]){
                    mtime[j] = v[line[j].front()] = i;
                    vis[line[j].front()] = 1;
                    line[j].pop();
                    if(t <= k) line[j].push(t++);
                }else if(i == 540 && mtime[j] <= i){
                    v[line[j].front()] += mtime[j];
                    vis[line[j].front()] = 1;
                }
            } 
        }
    }
    while(q--){
        int id;
        cin >> id;
        if(vis[id] == 0) 
            cout << "Sorry" << endl;
        else
            printf("%02d:%02d\n", v[id] / 60 + 8, v[id] % 60);
    }
    return 0;
}