• 【PAT甲级】1014 Waiting in Line (30 分)(队列维护)


    题面:

    输入四个正整数N,M,K,Q(N<=20,M<=10,K,Q<=1000),N为银行窗口数量,M为黄线内最大人数,K为需要服务的人数,Q为查询次数。输入K个正整数,分别代表每位顾客需要被服务的时间,Q次查询每次查询一位顾客被服务完离开银行的时间。如果他在五点以前(不包括五点)没有开始被服务,输出“Sorry”。

    trick:

    在五点以前(不包括五点)没有开始被服务,输出“Sorry”,而不是被服务完时间在五点以后(以题面为准)。

    AAAAAccepted code:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int a[1007];
     4 queue<pair<int,int> >qu[27];
     5 int ans[1007];
     6 int quy[1007];
     7 int sum[27];
     8 int main(){
     9     int n,m,k,q;
    10     cin>>n>>m>>k>>q;
    11     for(int i=1;i<=k;++i)
    12         cin>>a[i];
    13     for(int i=1;i<=q;++i)
    14         cin>>quy[i];
    15     for(int i=1;i<=m;++i)
    16         for(int j=1;j<=n;++j)
    17             if((i-1)*n+j<=k)
    18                 qu[j].push({a[(i-1)*n+j],(i-1)*n+j});
    19     int flag=m*n+1;
    20     while(1){
    21         int mn=1e9;
    22         for(int i=1;i<=n;++i)
    23             if(!qu[i].empty()&&qu[i].front().first+sum[i]<mn)
    24                 mn=qu[i].front().first+sum[i];
    25         if(mn==1e9)
    26             break;
    27         for(int i=1;i<=n;++i)
    28             if(!qu[i].empty()&&qu[i].front().first+sum[i]==mn){
    29                 if(sum[i]>=540)
    30                     ans[qu[i].front().second]=-1;
    31                 else{
    32                     sum[i]=mn;
    33                     ans[qu[i].front().second]=sum[i];
    34                 }
    35                 qu[i].pop();
    36                 if(flag<=k){
    37                     qu[i].push({a[flag],flag});
    38                     flag++;
    39                 }
    40             }
    41     }
    42     for(int i=1;i<=q;++i){
    43         int hour=ans[quy[i]]/60+8;
    44         int minute=ans[quy[i]]%60;
    45         if(ans[quy[i]]==-1)
    46             cout<<"Sorry";
    47         else{
    48             if(hour<10)
    49                 cout<<"0"<<hour<<":";
    50             else
    51                 cout<<hour<<":";
    52             if(minute<10)
    53                 cout<<"0"<<minute;
    54             else
    55                 cout<<minute;
    56         }
    57         cout<<"
    ";
    58     }
    59     return 0;
    60 }
    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    uni-appios端app白屏问题
    vue中倒计时假清除
    vue路由守卫
    JS函数命名规范
    VUE生成二维码
    移动端H5之css配置rem
    关于在vue中使用ui库样式无法修改的问题
    v28 error: resource android:attr/dialogCornerRadius not found.
    cocos2d: fullPathForFilename: No file found at script/jsb_prepare.js. Possible missing file
    android studio clean show: CreateProcess error=2, 系统找不到指定的文件。
  • 原文地址:https://www.cnblogs.com/ldudxy/p/11250349.html
Copyright © 2020-2023  润新知