FZU 1589 自动机

Accept: 240Submit: 904
Time Limit: 1000 mSecMemory Limit : 32768 KB

Problem Description

Tom博士最近研发了一个自动机,该自动机能够同时处理n个队列。其中,队列的编号为1..n。给定m个操作,模拟该自动机的工作状态。

第一行有2个整数n,m(1≤n, m≤10,000),表示自动机能处理n个队列,接下来m行每行一条操作指令。

每条指令的格式如下:
指令指令说明
INIT将自动机初始化,此时所有的队列清空。
PUSH id val把整数val加入到编号id的队列的尾部。
POP id val输出并删除编号id的队列的队首元素,如果队列为空,则输出“NULL”。

在每条指令中,id的编号在1..n中,val的取值范围为-2 31~2 31。输入数据保证操作的第一条指令都是是INIT。

Input

本题有多组输入数据,你必须处理到EOF为止。

Output

请对输入数据中每条POP指令的结果依次输出一行结果。

Sample Input

3 12 INIT PUSH 1 100 POP 2 PUSH 3 300 PUSH 1 200 PUSH 2 -5 POP 2 PUSH 2 -10 POP 1 INIT PUSH 1 7 POP 1

Sample Output

NULL -5 100 7
//不想用STL里面的deque, 如果用deque来做的话,应该代码会挺简单的,
//这里用一种很土的方法做的,字符串(string),锻炼下自己。
#include<iostream> #include<string> using namespace std; string str[10001]; int main() { string va; int n,m,i,j,id,start,end; char s[5]; while(scanf("%d%d",&n,&m)!=EOF) { scanf("%*s"); memset(str,'/0',sizeof(str)); for(i=0;i<m-1;i++) { scanf("%s",s); if(strcmp(s,"PUSH")==0) { scanf("%d",&id); cin>>va; if(str[id].size()==0) str[id]='S'+va+'E'; else str[id]='S'+va+'E'+str[id]; } else if(strcmp(s,"POP")==0) { scanf("%d",&id); if(str[id].find('S')==-1) printf("NULL/n"); else { start=str[id].find_last_of('S'); end=str[id].find_last_of('E'); for(j=start+1;j<end;j++) printf("%c",str[id][j]); printf("/n"); str[id][start]='/0'; str[id][end]='/0'; } } else memset(str,'/0',sizeof(str)); } } return 0; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值