close

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3248

 

#include<bits/stdc++.h>

using namespace std;

int main() {

    int cas, n;

    char op[15];

 

    scanf("%d", &cas);

    while (cas--) {

        scanf("%d", &n);

        getchar();

 

        stack< set<int> > a;

        map<set<int>, int> ma;

 

        int it = 0;

        for (int cass = 0; cass<n; cass++) {

            scanf("%s", &op);

            if(op[0] == 'P') {

                set<int> temp;

                a.push(temp);

            }

            else if (op[0] == 'D') {

 

                set<int> temp = a.top();

                a.pop(), a.push(temp), a.push(temp);

            }

            else if (op[0] == 'A') {

                set<int> temp = a.top();

                a.pop();

 

                if (!ma.count(temp)) {

                    a.top().insert(it), ma[temp] = it, it++;

                }

                else if ( !a.top().count(ma[temp]) )

                    a.top().insert( ma[temp] );

            }

            else if (op[0] == 'U') {

                set<int> temp = a.top();

                a.pop();

                set<int> temp1 = a.top();

                a.pop();

                set<int> temp2;

 

                map<set<int>, int>::iterator iter;

                for (iter = ma.begin(); iter != ma.end(); iter++) {

                    int x = iter->second;

                    if (temp.count(x) || temp1.count(x))

                        temp2.insert(x);

                }

                a.push(temp2);

            }

            else {

                set<int> temp = a.top();

                a.pop();

                set<int> temp1 = a.top();

                a.pop();

                set<int> temp2;

 

                map<set<int>, int>::iterator iter;

                for (iter = ma.begin(); iter != ma.end(); iter++) {

                    int x = iter->second;

                    if(temp.count(x) && temp1.count(x))

                        temp2.insert(x);

                }

                a.push(temp2);

            }

            printf("%d\n", a.top().size());

        }

        printf("***\n");

    }

    return 0;

}

arrow
arrow
    文章標籤
    UVA12096 The SetStack Computer
    全站熱搜

    楓綺 發表在 痞客邦 留言(0) 人氣()