图书馆

来源:互联网 发布:小猪cms正版多少钱 编辑:程序博客网 时间:2024/04/28 18:33
  • Description

临近期末,去图书馆自习的人越来越多。图书馆一共有N张桌子,依次编号为1,2……,N;每张桌子都配有6把椅子。结伴去自习的GGMM们有个习惯,优先选择已坐人数最少的桌子,如果不只一种选择,则选择编号最小的桌子。同时,他们不会分开选择不同的桌子。

  • Input

多组测试数据,每组数据第1行输入两个正整数N,Q(1≤N,Q≤50000)。接下来输入Q行,依次描述Q组事件。事件的输入格式如下:

① I a:有a位结伴的GGMM进入图书馆自习;

② D a b:编号为b的桌子上有a位GGMM离开;

③ C b:查询编号为b的桌子的空位数;

(1≤a≤6,1≤b≤N,第一组事件发生之前所有的座位都是空着的)输入直至文件结尾。

  • Output

每组数据输出Q行。

对于事件①:如果成功地找到了座位,则输出桌子的编号,如果没能找到则输出“failed”;

对于事件②:如果编号为b的桌子当前坐着的人数小于a则输出“error”,并过滤这组事件,否则正常处理并输出“success”;

对于事件③:按要求输出空位数。(具体格式见样例)

  • Sample Input

1 5
I 5
I 2
D 6 1
C 1
D 3 1
2 5
I 1
I 1
I 3
I 3
I 3

  • Sample Output

1
failed
error
1
success
1
2
1
2
failed

#include<queue>#include<cstring>#include<iostream>using namespace std;struct Table{    int tag,person;    bool operator < (const Table &a) const    {        if(a.person==person) return a.tag<tag;        else return a.person<person;    }};int N,Q,P[50050];priority_queue<Table> pq;void Pre(){    memset(P,0,sizeof(int)*(N+5));    while(pq.empty()!=true)    {        pq.pop();    }    for(int i=1;i<=N;i++)    {        Table tmp;        tmp.tag=i,tmp.person=0;        pq.push(tmp);    }}int main(){    //freopen("in.txt","r",stdin);    //freopen("out.txt","w",stdout);    while(cin>>N>>Q)    {        Pre();        int a,b;        char s[2];        Table tmp;        for(int i=0;i<Q;i++)        {            scanf("%s",s);            if(s[0]=='C')            {                scanf("%d",&b);                printf("%d\n",6-P[b]);                continue;            }            if(s[0]=='D')            {                scanf("%d%d",&a,&b);                if(P[b]>=a)                {                    P[b]-=a;                    tmp.tag=b, tmp.person=P[b];                    pq.push(tmp);                    printf("success\n");                }                else printf("error\n");                continue;            }            if(s[0]=='I')            {                scanf("%d",&a);                while(pq.top().person!=P[pq.top().tag])                {                    pq.pop();                }                if(pq.top().person+a<=6)                {                    printf("%d\n",pq.top().tag);                    P[pq.top().tag]+=a;                    tmp.tag=pq.top().tag, tmp.person=P[pq.top().tag];                    pq.pop(), pq.push(tmp);                }                else printf("failed\n");                continue;            }        }    }    return 0;}
0 0
原创粉丝点击