队列问题

发布时间 2023-04-18 17:13:11作者: muqi_lu

PAT甲级1014

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

通过代码

#include<iostream>
#include<queue>//队列头文件
#include<cstdio>
using namespace std;

struct customer{
    int process_time,leave_time=0;
};

int N,M,K,Q;//N窗口,M每个窗口人数,K总人数,Q查询数

int main(){
    customer c[1001];
    int i,j,cursor=1;
    cin>>N>>M>>K>>Q;
    queue<int>q[20];
    for(i=1;i<=K;i++){
        cin>>c[i].process_time;
    }
    for(int Time=480;Time<1020;Time++){
        for(i=0;i<N;i++){
            if(q[i].size()){
                j=q[i].front();
                if(c[j].leave_time==Time){
                    q[i].pop();
                }
            }
        }
        //送客
        for(int j=1;j<=M;j++){//遍历排
            for(i=0;i<N;i++){//遍历列
                if(q[i].size()<j){
                    if(cursor<=K){
                        q[i].push(cursor);
                        cursor++;
                    }
                }
            }
        }
        //入队
        for(i=0;i<N;i++){
            if(q[i].size()){
                j=q[i].front();
                if(c[j].leave_time==0){
                    c[j].leave_time=Time+c[j].process_time;
                }
            }
        }
        //迎客
    }
    while(Q--){
        cin>>i;
        if(c[i].leave_time==0){
            cout<<"Sorry\n";
        }
        else{
            printf("%02d:%02d\n",c[i].leave_time/60,c[i].leave_time%60);
        }
    }
    return 0;
}