STL(集合栈计算机,uva 12096)
2016-09-21 19:54
218 查看
每个不同的集合都有一个编号,每个集合中的集合用编号表示。
通过调用ID函数,查询ID与插入新集合可以同时搞定。
用映射取ID,用vector取集合。
set_union,set_intersection等一些奇怪的STL函数。
很神奇的解法。
听说本题极为重要,先感受一下,再慢慢体会。
代码
通过调用ID函数,查询ID与插入新集合可以同时搞定。
用映射取ID,用vector取集合。
set_union,set_intersection等一些奇怪的STL函数。
很神奇的解法。
听说本题极为重要,先感受一下,再慢慢体会。
代码
#include<bits/stdc++.h> using namespace std; typedef set<int> Set; map<Set,int>id; vector<Set>gt; char op[10]; int ID(Set x) { if(id.count(x)) return id[x]; gt.push_back(x); return id[x]=gt.size()-1; } int main() { int t; scanf("%d",&t); while(t--) { stack<int>s; id.clear(); gt.clear(); int n; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%s",op); char& ch=op[0]; switch (ch) { case 'P':s.push(ID(Set()));break; case 'D':s.push(s.top());break; default: { Set x1=gt[s.top()];s.pop(); Set x2=gt[s.top()];s.pop(); Set x; if(ch=='U') set_union(x1.begin(),x1.end(),x2.begin(),x2.end(),inserter(x,x.begin())); else if(ch=='I') set_intersection(x1.begin(),x1.end(),x2.begin(),x2.end(),inserter(x,x.begin())); else if(ch=='A') {x=x2;x.insert(ID(x1));} s.push(ID(x)); } } cout<<gt[s.top()].size()<<endl; } puts("***"); } return 0; }
相关文章推荐
- 5_5 集合栈计算机(UVa12096)<stack与STL其他容器的综合运用>
- UVa12096(集合中的集合+stl)集合栈计算机
- 紫书章五例题五 集合栈计算机 UVA 12096(stack)
- 紫书章五例题五 集合栈计算机 UVA 12096(stack)
- 紫书章五例题五 集合栈计算机 UVA 12096(stack)
- 紫书章五例题五 集合栈计算机 UVA 12096(stack)
- Uva12096 集合栈计算机
- 紫书章五例题五 集合栈计算机 UVA 12096(stack)
- 紫书章五例题五 集合栈计算机 UVA 12096(stack)
- 紫书章五例题五 集合栈计算机 UVA 12096(stack)
- 紫书章五例题五 集合栈计算机 UVA 12096(stack)
- C++ 栈 例5-5集合栈计算机(UVa12096)
- 例题 5-5 集合栈计算机 Uva 12096
- 算法竞赛入门经典(第2版)例题5-5 集合栈计算机 (The SetStack Computer UVa 12096)
- 集合栈计算机(UVa12096)
- UVa12096 把复杂数据化为对应的整数表达 STL
- uva 12096 - The SetStack Computer(STL 的运用)
- uva 12096 The SetStack Computer(STL)
- UVa 12096 stl之stack
- uva 12096 - The SetStack Computer(STL 的运用)