Uva12096

来源:互联网 发布:盛势网络剧更新时间 编辑:程序博客网 时间:2024/06/16 03:46

题目链接

考验对STL的熟练运用

这里写图片描述

#include<iostream>#include<string>#include<set>#include<map>#include<stack>#include<vector>#include<algorithm>#include<iterator>using namespace std;#define ALL(x) x.begin(),x.end()#define INS(x) inserter(x,x.begin())int t, n;set<int> Set;map<set<int>, int > IDcache;vector<set<int>> Setcache;int ID(set<int> x){    if (IDcache.count(x))        return IDcache[x];    Setcache.push_back(x);    return IDcache[x] = Setcache.size() - 1;}int main() {    cin >> t;    while (t--)    {        string op;        cin >> n;        stack<int> s;        for (int i = 0; i < n; i++)        {            cin >> op;            if (op[0] == 'P')                s.push(ID(set<int>()));  //把空集{}(就是0)入栈            else if (op[0] == 'D')            {                s.push(s.top());            }            else            {                set<int> x1 = Setcache[s.top()]; s.pop();                set<int> x2 = Setcache[s.top()]; s.pop();                set<int> x;                if (op[0] == 'U')                    set_union(ALL(x1), ALL(x2), INS(x));//并集操作                if (op[0] == 'I')                    set_intersection(ALL(x1), ALL(x2), INS(x));//交集操作                if (op[0] == 'A')                    x = x2, x.insert(ID(x1));                s.push(ID(x));                      }            cout << Setcache[s.top()].size() << endl;        }        cout << "***" << endl;    }    return 0;}
原创粉丝点击