Uva 12096.The SetStack Computer
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Uva 12096.The SetStack Computer相关的知识,希望对你有一定的参考价值。
嗯……这道题大思路很明显,但是细节好烦人……
大体上就是stack+set
对于栈中的元素,可以发现每个元素都是一个集合(set),而集合中的元素也是集合
因此,应该对每个集合(元素)进行编号 typedef set<int> element ,这样就能把每个元素看作保存整数的栈 stack s;
用map和vector进行映射集合(元素)和编号
map<element,int> ID_eache; vector<int> ID_eache2;
然后再按照要求写就行了
其中可用switch case判断操作。
要注意每个case都需要 break;
因为case只是入口,并不是出口。只要进去后,没有break就会一直运行下去
1 #include <cstdio> 2 #include <set> 3 #include <stack> 4 #include <iostream> 5 #include <map> 6 #include <vector> 7 using namespace std; 8 9 class LOVE{ 10 private: 11 int n; 12 typedef set<int> element; 13 stack <int> s; 14 15 map<element,int> ID_cache; 16 vector<element> ID_cache2; 17 18 int ID(element x){ 19 if(ID_cache.count(x))return ID_cache[x]; 20 ID_cache2.push_back(x); 21 return ID_cache[x]=ID_cache2.size()-1; 22 } 23 24 public: 25 void start(){ 26 scanf("%d",&n); 27 char com[10]; 28 while(n--){ 29 scanf("%s",com); 30 element temp1,temp2,temp3; 31 element::iterator it1,it2,it; 32 switch(com[0]){ 33 case ‘P‘: 34 s.push(ID(element())); 35 break; 36 case ‘D‘: 37 s.push(s.top()); 38 break; 39 case ‘U‘: 40 temp1=ID_cache2[s.top()]; 41 s.pop(); 42 temp2=ID_cache2[s.top()]; 43 s.pop(); 44 for(it=temp2.begin();it!=temp2.end();it++) 45 temp1.insert(*it); 46 s.push(ID(temp1)); 47 break; 48 case ‘I‘: 49 temp1=ID_cache2[s.top()]; 50 s.pop(); 51 temp2=ID_cache2[s.top()]; 52 s.pop(); 53 for(it1=temp1.begin();it1!=temp1.end();it1++){ 54 for(it2=temp2.begin();it2!=temp2.end();it2++){ 55 if(*it1==*it2){ 56 temp3.insert(*it1); 57 temp2.erase(*it2); 58 break; 59 } 60 } 61 } 62 s.push(ID(temp3)); 63 break; 64 case ‘A‘: 65 temp1=ID_cache2[s.top()]; 66 s.pop(); 67 temp2=ID_cache2[s.top()]; 68 s.pop(); 69 temp2.insert(ID(temp1)); 70 s.push(ID(temp2)); 71 break; 72 } 73 cout<<ID_cache2[s.top()].size()<<endl; 74 } 75 } 76 }; 77 78 79 int main(){ 80 //freopen("in.txt","r",stdin); 81 int n; 82 scanf("%d",&n); 83 while(n--){ 84 LOVE LIVE; 85 LIVE.start(); 86 printf("***\n"); 87 } 88 return 0; 89 }
以上是关于Uva 12096.The SetStack Computer的主要内容,如果未能解决你的问题,请参考以下文章
UVA12096 - The SetStack Computer(set + map映射)
uva 12096 The SetStack Computer(STL set)
The SetStack Computer UVA - 12096