The SetStack Computer UVA - 12096

原题链接

记录一下不管做几次都不会写的题

考察:STL+hash

第一次做完全是地铁老人看手机,第二次做基本默写lnj的代码还只能想起思路,本蒟蒻属实fw

正确思路:

       因为要输出栈顶集合的size,所以不能拿两个int做键和值.需要将set映射为int,而对应int我们也要能获得相应的集合.这里用到了hash的思想.可以用map和vector作为映射和反映射.

往这复习STL的交并补GO

这里复习插入迭代器GO

 1 #include <iostream>
 2 #include <stack>
 3 #include <set>
 4 #include <map>
 5 #include <unordered_map>
 6 #include <algorithm>
 7 using namespace std;
 8 vector<set<int> > mp;//unordered_map貌似不能用STL做键 
 9 map<set<int>,int> rmp;
10 int Getid(set<int> s)
11 {
12     if(!rmp.count(s)) rmp[s] = mp.size(),mp.push_back(s);
13     return rmp[s];
14 }
15 int main()
16 {
17     //freopen("in.txt","r",stdin);
18     //freopen("out.txt","w",stdout);
19     int T,n;
20     scanf("%d",&T);
21     while(T--)
22     {
23         stack<int> stk; mp.clear(); rmp.clear();
24         scanf("%d",&n);
25         char op[10];
26         while(n--)
27         {
28             scanf("%s",op);
29             if(op[0]=='P') { set<int> s;stk.push(Getid(s)); } 
30             else if(op[0]=='D') stk.push(stk.top());
31             else{
32                 set<int> res;
33                 set<int> a = mp[stk.top()]; stk.pop();
34                 set<int> b = mp[stk.top()]; stk.pop();
35                 if(op[0]=='U')
36                 {
37                     set_union(a.begin(),a.end(),b.begin(),b.end(),inserter(res,res.begin()));
38                     int id = Getid(res); 
39                     stk.push(id);
40                 }else if(op[0]=='I')
41                 {
42                     set_intersection(a.begin(),a.end(),b.begin(),b.end(),inserter(res,res.begin()));
43                     int id =Getid(res);
44                     stk.push(id);
45                 }else{
46                     b.insert(rmp[a]);
47                     int x = Getid(b);
48                     stk.push(x);
49                 }
50             }
51             printf("%d\n",mp[stk.top()].size());
52         }
53         printf("***\n");
54     }
55     return 0;
56 }
基本照搬刘老师的代码

 

posted @ 2021-01-21 14:50  acmloser  阅读(43)  评论(0编辑  收藏  举报