• 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;
    }
    
    
  • 相关阅读:
    ROS学习笔记8-rqt_console和roslaunch
    ROS学习笔记11-写一个简单的服务和客户端(C++版本)
    ROS学习笔记10-写一个简单的订阅者和发布者(C++版本)
    ROS学习笔记9-创建ros消息和服务
    ROS学习笔记INF-重要操作列表
    ROS学习笔记1-引言
    ROS学习笔记6-理解主题
    ROS学习笔记5-理解节点(Node)
    ROS学习笔记4-创建一个ROS包
    算是入行 ISP 了吧
  • 原文地址:https://www.cnblogs.com/xyqxyq/p/10366592.html
Copyright © 2020-2023  润新知