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;
}