zoukankan      html  css  js  c++  java
  • UVa-12096-集合栈计算机

    这题的话,我们读入操作之后,首先对于空集就是初始化为空。
    我们可以使用typedef 对于 set 重命名为Set,这样就可以直接用Set()的语法进行空集的初始化了。
    这题主要是对于集合的处理,我们可以给集合一个映射函数,这个函数对于已知集合就返回该ID,让主函数进行相应的操作。
    对于未知集合就按序存入暂存区,并给该集合分配一个ID。
    对于查询这个操作,我们使用map就可以判断。
    最后我们输出的时候,就是通过ID找到集合本身,然后输出它的大小就可以了。

    #include <iostream>
    #include <string>
    #include <stack>
    #include <map>
    #include <stack>
    #include <vector>
    #include <set>
    #include <algorithm>
    using namespace std;
    
    #define ALL(x) x.begin(), x.end()
    #define INS(x) inserter(x,x.begin())
    
    typedef set <int> Set;
    map<Set, int> IDcache;
    vector<Set> Setcache;
    
    int ID(Set x) {
        if (IDcache.count(x))
            return IDcache[x];
        Setcache.push_back(x);
        return IDcache[x] = Setcache.size() - 1;
    }
    
    int main()
    {
        int T;
        cin >> T;
        while (T--) {
            stack<int> s;
            int n;
            cin >> n;
            for (int i = 0; i < n;i++) {
                string op;
                cin >> op;
                if (op[0]=='P')
                    s.push(ID(Set()));
                else if (op[0]=='D')
                    s.push(s.top());
                else {
                    Set x1 = Setcache[s.top()];
                    s.pop();
                    Set x2 = Setcache[s.top()];
                    s.pop();
                    Set 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;
    }
    
    
  • 相关阅读:
    vc枚举本机端口信息API
    xmpp 与服务器连接并身份验证成功
    xmpp 常见错误 一
    xmpp 环境配置
    使用宏定义创建单例
    iOS知识列表
    ios sqlite 简单使用
    关于游戏
    开通博客园博客的第一天
    如何让移动设备的宽与浏览器视图的宽保持一致
  • 原文地址:https://www.cnblogs.com/xyqxyq/p/10366592.html
Copyright © 2011-2022 走看看