记录编号 |
56647 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[SDOI 2007] 小组队列 |
最终得分 |
100 |
用户昵称 |
cstdio |
是否通过 |
通过 |
代码语言 |
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;
}