PAT程序设计考题——甲级1014( Waiting in Line ) C++实现

来源:互联网 发布:mac设置用户名 编辑:程序博客网 时间:2024/06/05 14:11

点击打开pat链接


#include<iostream>
#include<math.h>
#include<algorithm>
#include<queue>
#include<map>
#include<stack>
#include<string>
#include<vector>
using namespace std;
#define INF 100000000
#define maxn 100010
int line;
struct windows{
 int id;
 int endtime,poptime;
 queue<int> line;
}temp;
bool cmp(windows a,windows b) {
 if(a.poptime==b.poptime) return a.id<b.id;
 return a.poptime<b.poptime;
}
 
int main()
{  vector<windows> bankline;
int win,pnum,anum;
cin>>win>>line>>pnum>>anum;
int endtime[maxn];
for(int i=0;i<win;i++)
{temp.id=i;
temp.endtime=8*60;
temp.poptime=8*60;
bankline.push_back(temp);
}
int sert[maxn];
for(int i=0;i<pnum;i++)
{
 cin>>sert[i];
}
int i;
for( i=0;i<min(win*line,pnum);i++)
{
bankline[i%win].endtime+=sert[i];
if(i<win)  bankline[i%win].poptime=bankline[i%win].endtime;
bankline[i%win].line.push(i);
endtime[i]=bankline[i%win].endtime;
}
for(;i<pnum;i++)
{
sort(bankline.begin(),bankline.end(),cmp);
bankline[0].line.pop();
bankline[0].poptime+=sert[bankline[0].line.front()];
bankline[0].line.push(i);
bankline[0].endtime+=sert[i];
endtime[i]=bankline[0].endtime;
}
int qw;
for(int k=0;k<anum;k++)
{
 cin>>qw;
 qw--;
 if(endtime[qw]-sert[qw]>=17*60) cout<<"Sorry"<<endl;
else {
 printf("%02d:%02d\n",endtime[qw]/60,endtime[qw]%60);}
}
return 0;
}

阅读全文
0 0