这道题很有意思,一开始又想复杂了
#include <iostream>
#include <sstream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <set>
#include <cctype>
#include <algorithm>
#include <cmath>
#include <deque>
#include <queue>
#include <map>
#include <stack>
#include <list>
#include <iomanip>
using namespace std;
///
#define INF 0xffffff7
#define maxn 10086
///
int BelongTeam[1000000]; //Elements are integers in the range 0 - 999999
list<int> lists;
list<int>::iterator pTeams[1200];//最多1000个Team
int main()
{ ///
int i, j;
int teams;
int cases = 1;
while (cin >> teams && teams != 0)
{
lists.clear();
int nums(0);
cout << "Scenario #" << cases << endl;
for (i = 0; i < teams; i++)
{
pTeams[i] = lists.end();
int nums(0);
cin >> nums;
for (j = 0; j < nums; j++)
{
int tempInput;
cin >> tempInput;
BelongTeam[tempInput] = i;
}
}
string line;
while (cin >> line && line != "STOP")
{
if (line == "ENQUEUE")
{
int tempInput;
cin >> tempInput;
if (pTeams[BelongTeam[tempInput]] != lists.end())
{
++pTeams[BelongTeam[tempInput]];
pTeams[BelongTeam[tempInput]] = lists.insert(pTeams[BelongTeam[tempInput]], tempInput);
}
else
pTeams[BelongTeam[tempInput]] = lists.insert(pTeams[BelongTeam[tempInput]], tempInput);
}
else if (line == "DEQUEUE")
{
int top = lists.front();
if (pTeams[BelongTeam[top]] == lists.begin()) //如果某一个Team元素弹完了,尾部指针要放到链表最后保证正确
{
pTeams[BelongTeam[top]] = lists.end();
}
lists.pop_front();
cout << top << endl;
}
}
cout << endl;
cases++;
}
///
return 0;
}
参考了http://www.cppblog.com/wuxu/archive/2011/11/24/160906.html
感觉这个方法很不错
迭代器指针数组的定义,链表的插入方式