标签:题目 sta jihe int idinsetout 笔记 UVA12096 push include
一道综合set,map,stack的STL题目,非常有意思!!(当然确实有一点绕)
UVA12096 AC码
#include<iostream> #include<map> #include<vector> #include<algorithm> #include<cstring> #include<set> #include<stack> using namespace std; int n,m; typedef set<int> jihe;//栈(sta)里存的都是int,而int所代表的集合里也是int map<jihe,int> quanzhi; vector<jihe>idinsetout; stack<int>sta;//栈(sta)里存的都是int(表示集合),因为是集合套集合所以集合里也是int(表示另一集合) #define ALL(x) x.begin(),x.end() #define INS(x) inserter(x,x.begin()) int setinidout(jihe c) { if(quanzhi.count(c)) return quanzhi[c];//之前写的是:idinsetout.count(c),被绕晕了 idinsetout.push_back(c); //(第一次忘了这个)在vector里新加上一个 return quanzhi[c]=idinsetout.size()-1;//他的角标就是他的权值(这两步新建集合) } int main() { cin>>n; for(int i=1;i<=n;i++) { cin>>m; for(int j=1;j<=m;j++) { string s; cin>>s; if(s[0]=='P') sta.push(setinidout(jihe()));//这里jihe() else if(s[0]=='D') sta.push(sta.top());//stack和vector的push操作有区别 else { jihe a=idinsetout[sta.top()]; sta.pop(); jihe b=idinsetout[sta.top()]; sta.pop(); jihe x; if(s[0]=='U') set_union (ALL(a),ALL(b),INS(x)); if(s[0]=='I') set_intersection (ALL(a),ALL(b),INS(x)); if(s[0]=='A') {x=b;x.insert(setinidout(a));} sta.push(setinidout(x)); } cout<<idinsetout[sta.top()].size()<<endl; } cout<<"***"<<endl; } }
很多要注意的点
标签:题目,sta,jihe,int,idinsetout,笔记,UVA12096,push,include 来源: https://www.cnblogs.com/juuich/p/12392768.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。