AcWing 132.グループキュー(双端キュー運用)
コンベヤー?ドア
現在の列の順序を一つの列で保存して、それからもう一つの列を利用して、各チームの中の人の順序を保存するのは本当に奇妙です.
現在の列の順序を一つの列で保存して、それからもう一つの列を利用して、各チームの中の人の順序を保存するのは本当に奇妙です.
#include
using namespace std;
const int MAXN = 1e6 + 10;
deque<int> P[1010], Q;
int t, n, tmp, Group[MAXN];
string s;
int main() {
//freopen("in", "r", stdin);
ios::sync_with_stdio(false);
int Case = 0;
while (cin >> t && t) {
for (int i = 0; i < t; i++) {
P[i].clear();
Group[i] = 0;
}
Q.clear();
for (int Cas = 1; Cas <= t; Cas++) {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> tmp;
Group[tmp] = Cas;
}
}
cout << "Scenario #" << ++Case << endl;
while (cin >> s) {
if (s[0] == 'S')
break;
if (s[0] == 'E') {
cin >> tmp;
if (!P[Group[tmp]].size())
Q.push_back(Group[tmp]);
P[Group[tmp]].push_back(tmp);
} else if (s[0] == 'D') {
int top = Q.front();
cout << P[top].front() << endl;
P[top].pop_front();
if (!P[top].size())
Q.pop_front();
}
}
cout << endl;
}
return 0;
}