记录编号 56647 评测结果 AAAAAAAAAA
题目名称 [SDOI 2007] 小组队列 最终得分 100
用户昵称 Gravatarcstdio 是否通过 通过
代码语言 C++ 运行时间 2.179 s
提交时间 2013-04-01 20:31:00 内存使用 0.70 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<deque>
#include<fstream>
using namespace std;
ifstream fin("team.in");
ofstream fout("team.out");
int m,n;//m个小组,n个元素
const int SIZEN=100001,SIZEM=301;
int belong[SIZEN]={0};//每个元素属于哪个组
deque<int> queue;//主队列
int last[SIZEM]={0};//每个组末尾在哪
void read(void){
	n=0;
	fin>>m;
	int i,j,k;
	int temp;
	for(i=0;i<m;i++){
		fin>>k;//该组元素个数
		n+=k;
		for(j=0;j<k;j++){
			fin>>temp;
			belong[temp]=i;
		}
	}
}
void work(void){
	string str;
	int temp,i;
	while(1){
		fin>>str;
		if(str=="STOP") break;
		else if(str=="ENQUEUE"){//入队
			fin>>temp;
			if(last[belong[temp]]==0){//最糟糕的情况
				queue.push_back(temp);
				last[belong[temp]]=queue.size();
			}
			else{//无节操插队
				queue.insert(queue.begin()+last[belong[temp]],temp);
				for(i=0;i<m;i++) if(last[i]>=last[belong[temp]]) last[i]++;
			}
			/*for(int km=0;km<queue.size();km++) cout<<queue[km]<<" ";
			cout<<endl;*/
		}
		else{//出队
			fout<<queue.front()<<endl;
			queue.pop_front();
			for(i=0;i<m;i++) if(last[i]) last[i]--;
		}
	}
}
int main(){
	read();
	work();
	fin.close();
	fout.close();
	return 0;
}