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

Posted secoding

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集合栈计算机 (The SetStack Computer,ACM/ICPC NWERC 2006,UVa12096相关的知识,希望对你有一定的参考价值。

题目描述:

技术分享图片

 1 #include<iostream>
 2 #include<string>
 3 #include<set>
 4 #include<map>
 5 #include<stack>
 6 #include<vector>
 7 #include<algorithm>
 8 using namespace std;
 9 
10 #define ALL(x) x.begin(),x.end()
11 #define INS(x) inserter(x,x.begin())
12 
13 typedef set<int> Set;
14 map<Set,int> IDcache; // 把集合映射成ID
15 vector<Set> Setcache; // 根据ID取集合
16 
17 int ID(Set x){
18     if(IDcache.count(x)) return IDcache[x] ;
19     Setcache.push_back(x) ;
20     return IDcache[x] = Setcache.size() - 1;
21 }
22 
23 int main(){
24     int t ;
25     cin >> t ;
26     while(t--){
27         stack<int> s;
28         int n;
29         cin>> n;
30         for(int i=0;i<n;i++){
31             string op;
32             cin >> op;
33             if(op[0] == P) s.push(ID(Set())) ;
34             else if (op[0] == D) s.push(s.top());
35             else{
36                 Set x1 = Setcache[s.top()] ; s.pop();
37                 Set x2 = Setcache[s.top()] ;s.pop() ;
38                 Set x ;
39                 if (op[0] == U) set_union (ALL(x1), ALL(x2), INS(x));
40                     if (op[0] == I) set_intersection (ALL(x1), ALL(x2), INS(x));
41                 if (op[0] == A) { x = x2; x.insert(ID(x1)); }
42                 s.push(ID(x));
43             }
44             cout << Setcache[s.top()].size() << endl;
45         }
46         cout << "***" << endl;
47     }
48     return 0;
49 }

 

以上是关于集合栈计算机 (The SetStack Computer,ACM/ICPC NWERC 2006,UVa12096的主要内容,如果未能解决你的问题,请参考以下文章

uva 12096 The SetStack Computer(STL set)

Uva 12096.The SetStack Computer

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

UVA 12096 The SetStack Computer

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

stack 集合栈计算机 (摘)