FOJ--1589--自动机--解题报告
2009-08-04 18:54
357 查看
Tom博士最近研发了一个自动机,该自动机能够同时处理n个队列。其中,队列的编号为1..n。给定m个操作,模拟该自动机的工作状态。
第一行有2个整数n,m(1≤n, m≤10,000),表示自动机能处理n个队列,接下来m行每行一条操作指令。
每条指令的格式如下:
在每条指令中,id的编号在1..n中,val的取值范围为-231~231。输入数据保证操作的第一条指令都是是INIT。
请对输入数据中每条POP指令的结果依次输出一行结果。
第一行有2个整数n,m(1≤n, m≤10,000),表示自动机能处理n个队列,接下来m行每行一条操作指令。
每条指令的格式如下:
指令 | 指令说明 |
---|---|
INIT | 将自动机初始化,此时所有的队列清空。 |
PUSH id val | 把整数val加入到编号id的队列的尾部。 |
POP id val | 输出并删除编号id的队列的队首元素,如果队列为空,则输出“NULL”。 |
数据输入输出
本题有多组输入数据,你必须处理到EOF为止。请对输入数据中每条POP指令的结果依次输出一行结果。
输入样例
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
输出样例
NULL -5 100 7
分析:这题我是用双队列容器(deque),因为queue容器不包含清楚功能
代码如下:
#include <stdio.h> #include <deque> #include <string> using namespace std; int main() { deque<int> elem[10001]; int n,m,id,i,val; char str[5]; while (scanf("%d%d",&n,&m)!=EOF) { while (m--) { scanf("%s",str); if(strcmp(str,"INIT")==0) { for(i=0;i<=n;i++) elem[i].clear(); } else if(strcmp(str,"PUSH")==0) { scanf("%d%d",&id,&val); elem[id].push_back(val); } else if(strcmp(str,"POP")==0) { scanf("%d",&id); if(elem[id].empty()) { printf("NULL/n"); } else { printf("%d/n",elem[id].front()); elem[id].pop_front(); } } } } return 0; }
相关文章推荐
- [codevs3160]最长公共子串解题报告|后缀自动机
- FOJ1650-A^B mod C解题报告
- FOJ--1046--Tempter of the Bone--解题报告(典型的迷宫搜索)
- FOJ 2013 A short problem 解题报告
- FOJ--1083--Expanding Rods--解题报告
- FOJ--1490--五子棋--解题报告
- 【0.9%】SPOJ7758 Grwoing Strings 解题报告 + AC代码 + 思路 + AC自动机简短总结
- BZOJ 1589 [Usaco2008 Dec] Tarjan缩点+记忆化搜索 解题报告
- FOJ--1685--跑跑卡丁车--解题报告
- FOJ--1698--最大乘积--解题报告(大数乘小数的问题)
- FOJ--1629--Above Average--解题报告
- FOJ--1409--文件压缩--解题报告
- FOJ--1339--Calculator--解题报告
- FOJ--1096--QS Network--解题报告
- FOJ 1589 自动机
- FOJ--1076--穿越沙漠--解题报告
- foj 2170 花生壳的序列 解题报告
- FOJ--1733--Image Distortion--解题报告
- FOJ--1635--Commandos--解题报告
- FOJ--1573--大学自习室--解题报告