UVa12096(集合中的集合+stl)集合栈计算机

2017年07月31日 9点热度 0人点赞 0条评论

UVa12096(集合中的集合+stl)集合栈计算机

//一个集合代表一个数字,神奇的操作
#include
#include
#include
#include
#include
#include
#include
using namespace std;
string str;
stack s;
typedef set Set;
map mp;
vector setcache;
int ID(Set x)
{
    //查找集合x的编号,如果没找到,就为其新建一个编号
    if(mp.count(x)) return mp[x];
    setcache.push_back(x);
    return mp[x]=setcache.size()-1;
}
int main()
{
    int T,n;
    cin>>T;
    while(T--)
    {
        scanf("%d",&n);
        while(n--)
        {
            cin>>str;
            if(str[0]=='P') s.push(ID(Set()));//空集入栈
            else if(str[0]=='D') s.push(s.top());
            else
            {
                Set a,b,c;
                a=setcache[s.top()];
                s.pop();
                b=setcache[s.top()];
                s.pop();
                if(str[0]=='U')
                    set_union(a.begin(),a.end(),b.begin(),b.end(),inserter(c,c.begin()));
                if(str[0]=='I')
                    set_intersection(a.begin(),a.end(),b.begin(),b.end(),inserter(c,c.begin()));
                if(str[0]=='A')
                {
                    b.insert(ID(a));
                    c=b;
                }
                s.push(ID(c));
            }
            cout<
未经允许不得转载!UVa12096(集合中的集合+stl)集合栈计算机

update

纸上得来终觉浅, 绝知此事须躬行。