PAT 1014. Waiting in Line

来源:互联网 发布:杀破狼 js 无损下载 编辑:程序博客网 时间:2024/06/07 23:20

一开始题意理解错了。

是17:00之前还没开始服务的就不能服务了。

不是说不能完成就sorry了。

另外这种模拟题一旦用数组和很多游标

自己就很容易出错。

以后还是要尽量少用了。


#include<cstdio>#include<cmath>#include<algorithm>#include<cstdlib>#include<iostream>#include<cstring>#include<queue>using namespace std;#define maxn 1111int que[20][maxn];//记录队列的情况int pre[20];//记录队列头指针int cur[20];//记录当前指针int ans[maxn];//记录每个节点的完成时间int tim[maxn];//记录每个顾客的时间int n,m,k,q;int findpre(){        int minn,flag,i;        minn=maxn;        for(i=0;i<n;i++)                if(ans[que[i][pre[i]]]<minn)        {                minn=ans[que[i][pre[i]]];                flag=i;        }        return flag;}void showtime(int x){        x=x-1;        int beg=ans[x]-tim[x];        int i=ans[x]/60;        int j=ans[x]%60;        if(beg>=540)                printf("Sorry\n");        else                printf("%02d:%02d\n",i+8,j);}int main(){        int i,j,l,x,y;        scanf("%d %d %d %d",&n,&m,&k,&q);        for(i=0;i<k;i++)                scanf("%d",&tim[i]);        x=0;//代表第几位顾客        for(i=0;i<m;i++)//队伍的第几个人                for(j=0;j<n;j++)//第几号窗口        {                que[j][i]=x;                if(i==0)                        ans[x]=tim[x];                else                        ans[x]=ans[que[j][i-1]]+tim[x];                x++;        }        for(i=0;i<n;i++)        {                pre[i]=0;                cur[i]=m;        }        while(x<k)        {                y=findpre();//找到队列头所需时间最小的那个队列                que[y][cur[y]]=x;                //printf("%d %d %d\n",y,cur[y],x);                ans[x]=ans[que[y][cur[y]-1]]+tim[x];                pre[y]++;                cur[y]++;                x++;        }        for(i=0;i<q;i++)        {                scanf("%d",&j);                showtime(j);        }        return 0;}




0 0
原创粉丝点击