练习queue的题
原本是对于每个测试重声明queue的,后来发现似乎声明比较
耗时,于是改成main外声明,使用前归零。
最开始误以为 t = 0 时也要输出回车,妥妥PE了
#include <cstdio>
#include <queue>
#include <map>
#include <cstring>
const int MAXN = 1000;
const int CMDS = 7;
using namespace std;
int belong[1000000];
queue<int> q;
queue<int> team[MAXN+24];
int main()
{
int t;
int kase = 0;
char cmd[CMDS+1];
while (scanf("%d", &t) && t)
{
// clear
memset(belong, 0, sizeof(belong));
while (!q.empty()) q.pop();
for (int i = 0; i < MAXN; i++) while (!team[i].empty()) team[i].pop();
// input and init
for (int i = 0; i < t; i++)
{
int ele_cnt;
int element;
scanf("%d", &ele_cnt);
for (int j = 0; j < ele_cnt; j++)
{
scanf("%d", &element);
belong[element] = i;
}
}
// work
printf("Scenario #%d\n", ++kase);
while (scanf("%s", cmd))
{
// enqueue
if (cmd[0] == 'E')
{
int id;
int histeam;
scanf("%d", &id);
histeam = belong[id];
if(team[histeam].empty()) q.push(histeam);
team[histeam].push(id);
}
// dequeue
else if (cmd[0] == 'D')
{
int theteam = q.front();
printf("%d\n", team[theteam].front());
team[theteam].pop();
if (team[theteam].empty()) q.pop();
}
else break;
}
putchar('\n');
}
return 0;
}