知识点1:队列
头文件#include<queue>
不能用vector容器初始化queue
1.常用函数
- push() 在队尾插入一个元素
- pop() 删除队列第一个元素
- size() 返回队列中元素个数
- empty() 如果队列空则返回true
- front() 返回队列中的第一个元素
- back() 返回队列中最后一个元素
知识点2:输出格式若小于两位数,则用补齐,这里要用到C语言的%02d,因此要加上#include<cstdio>的头文件
AC代码如下:
#include<iostream>
#include<queue>
#include<cstdio>
using namespace std;
struct customer{
int process_time,leave_time=0;
};
customer c[1000];
int main()
{
int N,M,K,Q;//N:窗口数 M:每个窗口前人数 K:顾客总数 Q:查询数
int i,j,cursor=1;
cin>>N>>M>>K>>Q;
queue<int>q[N];
for(int i=1;i<=K;i++)cin>>c[i].process_time;
for(int time=480;time<1020;time++)
{
for(int i=0;i<N;i++)
{
if(q[i].size())
{
j=q[i].front();
if(c[j].leave_time==time)
{
q[i].pop();
}
}
}//送客
for(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(int 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);
}
}
}