题意:初始状态的栈内包含一个空集,对栈进行一下操作:

PUSH:向栈内压入一个空集

DUP:复制栈顶,并压入栈内

UNION:将栈顶端两个集合出栈,并将两个元素的并集入栈

INTERSECT:将栈顶端两个集合出栈,并将两个元素的交集入栈

ADD:将栈顶端两个集合出栈,将先出栈元素加入后出栈元素的集合中,而后入栈

对于每次操作,输出栈顶集合的元素数。

思路:声明一个栈st用来存放集合,声明多个堆用于表示集合,声明映射<set,int>表示集合编号,对于每次待入栈的集合进行编号查找工作,若已经有编号就将该编号入栈,否则赋予该集合一个编号,而后入栈。

对于并集操作使用:set_union()进行求解

对于交集操作使用:set_intersection()进行求解

#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define INF 999999999 typedef set<int> Set;
map<Set,int>Map;
stack<int> st;
vector<Set> v; int Find(Set s)
{
if(Map.count(s))
return Map[s];
v.push_back(s);
return Map[s] = v.size()-;
} int main()
{
int T,n;
cin >> T;
string s;
while(T--)
{
cin >> n;
Map.clear();
v.clear();
while(!st.empty())
st.pop();
for(int i=;i<=n;i++)
{
cin >> s;
if(s[] == 'P')
{
st.push(Find(Set()));
}
else if(s[]=='D')
{
st.push(st.top());
}
else
{
Set s1 = v[st.top()];
st.pop();
Set s2 = v[st.top()];
st.pop();
Set temp;
if(s[]=='U')
{
set_union(s1.begin(),s1.end(),s2.begin(),s2.end(),inserter(temp,temp.begin()));
}
else if(s[]=='I')
{
set_intersection(s1.begin(),s1.end(),s2.begin(),s2.end(),inserter(temp,temp.begin()));
}
else if(s[]=='A')
{
temp = s2;
temp.insert(Find(s1));
}
st.push(Find(temp));
}
cout << v[st.top()].size() << endl;
}
cout << "***" << endl;
}
return ;
}

The SetStack Computer UVA - 12096的更多相关文章

  1. set有关的函数的用法(The SetStack Computer UVA - 12096)

    #include<bits/stdc++.h> using namespace std; typedef set<int> Set; map<Set,int> ID ...

  2. 12096 - The SetStack Computer UVA

    Background from Wikipedia: \Set theory is a branch of mathematics created principally by the German ...

  3. UVA.12096 The SetStack Computer ( 好题 栈 STL混合应用)

    UVA.12096 The SetStack Computer ( 好题 栈 STL混合应用) 题意分析 绝对的好题. 先说做完此题的收获: 1.对数据结构又有了宏观的上的认识; 2.熟悉了常用STL ...

  4. uva 12096 The SetStack Computer

    点击打开链接uva 12096 思路: STL模拟 分析: 1 题目给定5种操作,每次输出栈顶集合的元素的个数 2 利用stack和set来模拟,set保存集合的元素.遇到push的时候直接在stac ...

  5. EOJ 1641/UVa The SetStack Computer

    Background from Wikipedia: “Set theory is a branch of mathematics created principally by the German ...

  6. UVa12096.The SetStack Computer

    题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  7. 集合栈计算机(The SetStack Computer, ACM/ICPC NWERC 2006,Uva12096)

    集合栈计算机(The SetStack Computer, ACM/ICPC NWERC 2006,Uva12096) 题目描述 有一个专门为了集合运算而设计的"集合栈"计算机.该 ...

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

    UVA12096 - The SetStack Computer(set + map映射) 题目链接 题目大意:有五个动作: push : 把一个空集合{}放到栈顶. dup : 把栈顶的集合取出来, ...

  9. uva 12096 - The SetStack Computer(集合栈)

    例题5-5 集合栈计算机(The Set Stack Computer,ACM/ICPC NWERC 2006,UVa12096) 有一个专门为了集合运算而设计的"集合栈"计算机. ...

随机推荐

  1. html语义化标签

    1. HTML语义化的理解 根据内容的结构化,选择合适的标签,便于开发出读者阅读.写出更优雅的代码,让浏览器的爬虫和机器很好地解析. 好处: (1). 为了在没有css时,也可以很好地呈现出内容结构, ...

  2. IDEA快捷建使用

    因为以前使用的IDE工具是Eclipse,所以在公司中都是用IDEA的情况下,换成了IDEA,感觉是好用了很多. 其他快捷键: Ctrl+Shift + Enter,语句完成 “!”,否定完成,输入表 ...

  3. 菜鸟学IT之四则运算升级版

     菜鸟学IT之四则运算升级版 本次作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2213 团队代码github远程仓库的 ...

  4. Java的selenium代码随笔(8)

    Selenium截图方法一: Selenium中截图类TakeScreenshout,这个类主要是获取浏览器窗体内的内容,不包括浏览器的菜单和桌面的任务栏区域,我们用百度首页来截图,看看截图效果. F ...

  5. C#技巧记录——持续更新

    作为一名非主修C#的程序员,在此记录下学习与工作中C#的有用内容,持续更新 对类型进行约束,class指定了类型必须是引用类型,new()指定了类型必须具有一个无参的构造函数 where T : cl ...

  6. LeetCode_p150_逆波兰表达式计算/后缀表达式计算

    有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除法只保留整数部分. 给定逆波兰表达式总是有效的.换句话说,表达式总会得出有效数值且不存在除 ...

  7. CTFcracktools——非常实用的CTF解密工具

    做bugku的crypto题时偶然发现了这个,吐血推荐!! 十分全面好用 整合了常见的解码.进制转换等CTF常用的工具: 下载地址: https://github.com/0Linchen/CTFCr ...

  8. 迁移git

    转自:https://www.darrenfang.com/2016/03/transferring-a-repository/ 因为更换服务器,需要将原来的 git 项目迁移到新的服务器上,需要保留 ...

  9. ADO.Net笔记整理(一)

    几次装机,Notes已烟消云散,近日因为Node.js死活搞不定,无奈装机,备份好的东东,没想到磁盘扇区出现异常,可能是PE启动盘的病毒,只好将磁盘全部重新分区,恢复数据也懒得恢复了,日积月累关乎将来 ...

  10. EXCEL计算根据当前时间和身份证号计算准确年龄

    假设身份证号在A2单元格 =IF(MONTH(NOW())<MONTH(DATE(MID(A2,7,4),MID(A2,11,2),MID(A2,13,2))),INT(YEAR(NOW())- ...