2259 Team Queue
http://poj.org/problem?id=2259
概要
すでに同じチームの人間が並んでいれば、その人のすぐ後ろに入れるようなキューをシミュレートする。
方針
チーム内での順番と全体のチームの順番とを別々のキューで管理した。
ソース
#include<iostream> #include<string> #include<map> #include<queue> #include<cstring> using namespace std; const int inf = 1<<29; const double eps = 1e-8; #define REP(i,a,b) for(i=a; i<b; ++i) #define rep(i,n) REP(i,0,n) int main() { std::ios_base::sync_with_stdio(false); int team,n,i,j,k,scenum = 1,t; while(cin>>team, team) { cout<<"Scenario #"<<scenum<<endl; queue<int> teamqueue[team]; queue<int> overall; map<int,int> id2team; string query; rep(i,team) { cin>>j; rep(k,j) { cin>>t; id2team.insert(make_pair(t,i)); } } while(true) { cin>>query; if(query == "STOP") break; if(query == "ENQUEUE") { int nt; cin>>nt; if(teamqueue[id2team[nt]].empty()) { overall.push(id2team[nt]); } teamqueue[id2team[nt]].push(nt); }else{ int nt = overall.front(); cout<<teamqueue[nt].front()<<endl; teamqueue[nt].pop(); if(teamqueue[nt].empty()) overall.pop(); } } cout<<endl; scenum++; } }