模拟插队,出队,POJ(2259)
题目链接:http://poj.org/problem?id=2259
水题一个,就是要记录一下每个队列是否有人bool[i],
#include <iostream> #include <string> #include <queue> #include <map> #include <cstdio> using namespace std; int nCase,nNum; ///队列总数 queue <long> nQue[1001]; ///存储每个队列 queue <int> nS; ///存储队列号 int nM[1000000]; ///队列与队列号的映射表 bool nFlag[1001]; ///是否有同组元素 void init() { for(int i=0; i!=nNum; i++) { nFlag[i]=false; while(!nQue[i].empty()) nQue[i].pop(); } while(!nS.empty()) nS.pop(); } void input() { int nElem,elemNum; for(int i=0; i!=nNum; ++i) { cin>>elemNum; ///每个队的人数 for(int j=0; j!=elemNum; j++) { cin>>nElem; nM[nElem]=i; } } } void solve() { string nCommand; int nElem; cout<<"Scenario #"<<++nCase<<endl; while(cin>>nCommand,nCommand!="STOP") { if(nCommand=="ENQUEUE") { cin>>nElem; if(!nFlag[nM[nElem]]) { nFlag[nM[nElem]]=true; nS.push(nM[nElem]); } nQue[nM[nElem]].push(nElem); } else if(nCommand=="DEQUEUE") { int nId = nS.front(); cout<<nQue[nId].front()<<endl; nQue[nId].pop(); if(nQue[nId].empty()) { nS.pop(); nFlag[nId]=false; } } } cout<<endl; } int main() { nCase=0; while(cin>>nNum,nNum) { init(); input(); solve(); } return 0; }