南邮 OJ 1666 图书馆

来源:互联网 发布:ov7620中文版数据手册 编辑:程序博客网 时间:2024/05/10 08:02

图书馆

时间限制(普通/Java) : 3000 MS/ 9000 MS          运行内存限制 : 65536 KByte
总提交 : 200            测试通过 : 47 

比赛描述

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




输入

多组测试数据,每组数据第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,第一组事件发生之前所有的座位都是空着的)输入直至文件结尾。


输出

每组数据输出Q行。

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

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

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


样例输入

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

样例输出

1
failed
error
1
success
1
2
1
2
failed

题目来源

openxxx





de<set>#define MAX_PLACE 6using namespace std;set<int> tableNoWithPlace[MAX_PLACE+1];set<int>::iterator it;void in(){int a, i, tableNo;cin>>a;for(i=MAX_PLACE; i>=a; i--){if(!tableNoWithPlace[i].empty()){break;}}if(i>=a){it = tableNoWithPlace[i].begin();tableNo = *it;tableNoWithPlace[i].erase(it);tableNoWithPlace[i-a].insert(tableNo);cout<<tableNo<<endl;}else{cout<<"failed"<<endl;}}void out(){int a, b, i;cin>>a>>b;for(i=0; i<=MAX_PLACE-a; i++){if(tableNoWithPlace[i].count(b)){break;}}if(i<=MAX_PLACE-a){tableNoWithPlace[i].erase(b);tableNoWithPlace[i+a].insert(b);cout<<"success"<<endl;}else{cout<<"error"<<endl;}}void ask(){int b, i;cin>>b;for(i=0; i<=MAX_PLACE; i++){if( tableNoWithPlace[i].count(b) ){break;}}cout<<i<<endl;}int main(){int N, Q, i;char operation;while(cin>>N>>Q){for(i=0; i<=MAX_PLACE; i++){tableNoWithPlace[i].clear();}for(i=1; i<=N; i++){tableNoWithPlace[6].insert(i);}while(Q--){cin>>operation;switch (operation){case 'I':in();break;case 'D':out();break;case 'C':ask();break;default:break;}}}}


0 0
原创粉丝点击