uva 12096 The SetStack Computer(STL set)

Posted Neord

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uva 12096 The SetStack Computer(STL set)相关的知识,希望对你有一定的参考价值。

题意:

有5种操作:

PUSH:加入“{}”空集合入栈。

DUP:栈顶元素再入栈。

UNION:出栈两个集合,取并集入栈。

INTERSECT:出栈两个集合,取交集入栈。

ADD:出栈两个集合,将先出栈的加入到后出栈的集合中。

输入不超过2000, 保证操作顺利进行。

分析:

用set<int>(本身又可以映射成一个int)去模拟集合,所以可以将不同的集合映射成int型。

用一个Map<set<int>,int> 去映射成不同的int。

以后需要set做交集并集的时候再从map中拿出set做操作再映射,有点复杂,需要慢慢体会这种映射的方法。

代码有两个难点:

1.插入迭代器:

2.set_union() , set_intersection.

(待补)

代码参考刘汝佳第五章例题

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 #include <set>
 5 #include <vector>
 6 #include <string>
 7 #include <map>
 8 #include <queue>
 9 #include <stack>
10 #include <algorithm>
11 #include <sstream>
12 
13 #define ALL(x) x.begin(),x.end()
14 #define INS(s) inserter(x,x.begin())
15 using namespace std;
16 typedef set<int> Set;
17 map<Set, int> IDcache;
18 vector<Set> Setcache;
19 int ID (Set x)
20 {
21     if(IDcache.count(x)) return IDcache[x];
22     Setcache.push_back(x);
23     return IDcache[x] = Setcache.size() - 1; //都是空集, 唯一区别就是大小
24 }
25 int main()
26 {
27 //    freopen("1.txt","r",stdin);
28     int t;
29     cin>>t;
30     while(t--)
31     {
32         IDcache.clear();
33         Setcache.clear();
34         stack<int> s;
35         int n;
36         cin>>n;
37         for(int i = 0 ; i < n ; i++)
38         {
39             string op;
40             cin >> op;
41             if(op[0] == P)
42                s.push(ID(Set()));
43             else if(op[0] == D)
44                 s.push(s.top());
45             else
46             {
47                 Set x1 = Setcache[s.top()];
48                 s.pop();
49                 Set x2 = Setcache[s.top()];
50                 s.pop();
51                 Set x;
52                 if(op[0] == U) set_union(ALL(x1),ALL(x2),INS(x));
53                 if(op[0] == I) set_intersection(ALL(x1), ALL(x2), INS(x));
54                 if(op[0] == A)
55                 {
56                     x=x2;
57                     x.insert(ID(x1));
58                 }
59                 s.push(ID(x));
60             }
61              cout<< Setcache[s.top()].size() <<endl;
62         }
63         cout<<"***"<<endl;
64     }
65 }

 

以上是关于uva 12096 The SetStack Computer(STL set)的主要内容,如果未能解决你的问题,请参考以下文章

UVA12096 - The SetStack Computer(set + map映射)

The SetStack Computer UVA - 12096

uva 12096 The SetStack Computer(STL set)

集合栈计算机 (The SetStack Computer,ACM/ICPC NWERC 2006,UVa12096

集合栈计算机(The Set Stack Computer,ACM/ICPC NWERC 2006,UVa12096)

UVa12096