银行排队(Bank)

tech2022-07-12  188

今天我来发一个银行排队(Bank) 的博客吧

题目: K个人来银行排队办理业务。 银行有n个窗口可以同时办理,每个窗口允许有m个人排队,其余的人在银行大厅等待。 当某个窗口排队人数少于m时,在大厅等待的人可进入该窗口排队。 每个人都有自己要办的业务,每个业务要花费一定的时间, 银行的上班时间是早上8点到下午17点,若超过17点,就无法办理相关的业务了。 有q次查询,查询q个顾客办理业务结束时的时间。对于无法办理相关业务的查询,输出sorry。 假设第一位顾客从早上8点开始办理业务,k个顾客编号依次为: 12…k。

这里有一个小坑:

只要顾客在下班前开始办理业务,那就要将其办理完,因此,查询输出的结束时间有可能超过 17:00

所以。。。 一定要注意~

好了,上代码:

#include<bits/stdc++.h> using namespace std; queue<int> win[11]; int t[101]; int n,m,k,q,c=1,tc,a; int main(){ cin>>n>>m>>k>>q; while(c<=n*m&&c<=k){ for(int j=1;j<=n&&c<=n*m&&c<=k;j++){ cin>>a; if(!win[j].empty()) tc=win[j].back()+a; else tc=a; win[j].push(tc); t[c++]=tc; } } for(int i=n*m+1;i<=k;i++){ cin>>a; int minn=0x7fffffff,mid=0; for(int j=1;j<=n;j++){ if(win[j].front()<minn){ minn=win[j].front(); mid=j; } } tc=win[mid].back()+a; win[mid].push(tc); t[c++]=tc; win[mid].pop(); } for(int i=1;i<=q;i++){ cin>>a; int x=t[a]+8*60,y=t[a-1]+8*60; if(x>17*60&&y>=17*60) cout<<"sorry"<<endl; else printf("%02d:%02d\n",x/60,x%60); } }

这题还是挺简单的吧。。 不讲了,拜拜~

最新回复(0)