算法习题---5.5集合栈计算机(Uva12096)*****
一:题目
对于一个以集合为元素的栈,初始时栈为空。 输入的命令有如下几种: PUSH:将空集{}压栈 DUP:将栈顶元素复制一份压入栈中 UNION:先进行两次弹栈,将获得的集合A和B取并集,将结果压栈 INTERSECTION:先进行两次弹栈,将获得的集合A和B取交集,将结果压栈 ADD:先进行两次弹栈,将获得的集合A和B中,先出栈的集合(如A先)加入到后出栈的集合,将结果压栈 输出每一步操作后栈顶集合的元素的个数。
(一)样例输入
PUSH
DUP
ADD
PUSH
ADD
DUP
ADD
DUP
UNION PUSH
PUSH
ADD
PUSH
INTERSECT
(二)样例输出
*** ***
二:代码实现
(一)知识前提STL补充--set集合相等判断
(二)代码实现
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <map>
#include <vector>
#include <set>
#include <stack>
#include <string>
#include <algorithm> using namespace std; typedef set<int> Set; vector<Set> Vec_Set_ID; //辅助获取集合对应ID号,其中每次只往里面添加新的集合
map<Set, int> Map_Set; //集合对应集合标识号,同上面vector,向其中添加新的集合和集合号 stack<int> Sta; //集合号栈 int GetIDForSet(Set s)
{
int number;
if (Map_Set.count(s)) //如果直接找到了编号,则直接返回集合编号
return Map_Set[s];
//若是没有找到集合标号,先将该集合放入容器中之后获取编号
Vec_Set_ID.push_back(s);
number = Vec_Set_ID.size() - 1; //重点:每个集合和其对应的编号与下标一致,方便寻找
Map_Set.insert(pair<Set, int>(s, number));
return number;
} int main()
{
freopen("data5_5.in", "r", stdin);
freopen("data5_5.out", "w", stdout); int count,oper_c;
string cmd;
cin >> count;
while (count--)
{
cin >> oper_c;
while (oper_c--)
{
cin >> cmd;
//开始处理
if (cmd[] == 'P') //入空集合
Sta.push(GetIDForSet(Set()));
else if (cmd[] == 'D') //栈顶集合复制一份入栈
Sta.push(Sta.top());
else
{
Set s;
Set s1 = Vec_Set_ID[Sta.top()]; Sta.pop();
Set s2 = Vec_Set_ID[Sta.top()]; Sta.pop();
if (cmd[] == 'U') //出栈两个集合将其并集入栈
set_union(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(s, s.begin()));
else if (cmd[] == 'I')
set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(s, s.begin()));
else if (cmd[] == 'A')
{
s2.insert(GetIDForSet(s1));
s = s2;
}
//进行插入栈中
Sta.push(GetIDForSet(s));
}
//输出每一步栈顶集合的大小
cout << Vec_Set_ID[Sta.top()].size() << endl;
}
cout << "***" << endl;
} freopen("CON", "r", stdin);
freopen("CON", "w", stdout);
return ;
}
算法习题---5.5集合栈计算机(Uva12096)*****的更多相关文章
- 集合栈计算机(The SetStack Computer, ACM/ICPC NWERC 2006,Uva12096)
集合栈计算机(The SetStack Computer, ACM/ICPC NWERC 2006,Uva12096) 题目描述 有一个专门为了集合运算而设计的"集合栈"计算机.该 ...
- UVA12096 集合栈计算机(map和vector实现双射关系+集合的交并运算的STL)
题目大意: 对于一个以集合为元素的栈,初始时栈为空. 输入的命令有如下几种: PUSH:将空集{}压栈 DUP:将栈顶元素复制一份压入栈中 UNION:先进行两次弹栈,将获得的集合A和B取并集,将结果 ...
- 5_5 集合栈计算机(UVa12096)<stack与STL其他容器的综合运用>
有一个专门为了集合运算而设计的“集合栈”计算机.该机器有一个初始化为空的栈,并支持以下操作:( 维护 N(1≤N≤2000) 个操作, 可能的五种操作如下:) ■PUSH: 在栈顶加入一个空集合 A= ...
- stack 集合栈计算机 (摘)
有一个专门为了集合运算而设计的“集合栈”计算机.该机器有一个初始为空的栈,并且支持以下操作:PUSH:空集“{}”入栈DUP:把当前栈顶元素复制一份后再入栈UNION:出栈两个集合,然后把两者的并集入 ...
- UVa - 12096 集合栈计算机(STL)
[题意] 有一个专门为了集合运算而设计的“集合栈”计算机.该机器有一个初始为空的栈,并且支持以下操作:PUSH:空集“{}”入栈DUP:把当前栈顶元素复制一份后再入栈UNION:出栈两个集合,然后把两 ...
- 集合栈计算机(UVa12096)
题目具体描述见:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_prob ...
- 集合栈计算机 (The SetStack Computer,ACM/ICPC NWERC 2006,UVa12096
题目描述: #include<iostream> #include<string> #include<set> #include<map> #inclu ...
- uva 12096 - The SetStack Computer(集合栈)
例题5-5 集合栈计算机(The Set Stack Computer,ACM/ICPC NWERC 2006,UVa12096) 有一个专门为了集合运算而设计的"集合栈"计算机. ...
- C语言算法系列---1.队列和栈
写在前面:在家玩了好久,实在是不知道干嘛了,突然想找些事做,现在是时候做些什么了.这些东西不见得多高深,也可能很简单,但很基础,也无法忽视.同时,也是自己学习走过的一条路. 这是开头,就写写C的队列和 ...
随机推荐
- bzoj 4128: Matrix ——BSGS&&矩阵快速幂&&哈希
题目 给定矩阵A, B和模数p,求最小的正整数x满足 A^x = B(mod p). 分析 与整数的离散对数类似,只不过普通乘法换乘了矩阵乘法. 由于矩阵的求逆麻烦,使用 $A^{km-t} = B( ...
- 动态加载 ShellCode绕过杀软
反病毒解决方案用于检测恶意文件,并且通常使用静态分析技术来区分二进制文件的好坏.如果是恶意文件本身包含恶意内容(ShellCode),那么依靠静态分析技术会非常有效,但如果攻击者使用轻量级的stage ...
- SPA项目开发--左侧树加首页导航
SPA项目开发--左侧树以及首页导航 1. Mock.js 前后端分离之后,前端迫切需要一种机制,不再需要依赖后端接口开发,而今天的主角mockjs就可以做到这一点 Mock.js是一个模拟数据 ...
- ML,DL核心数学及算法知识点总结
ML,DL核心数学及算法知识点总结:https://mp.weixin.qq.com/s/bskyMQ2i1VMNiYKIvw_d7g
- python时间序列数据的对齐和数据库的分批查询
欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 0. 前言 在机器学习里,我们对时间序列数据做预处理的时候,经常会碰到一个问题:有多个时间序列存在多个表里,每个表的的时间轴不完全相同,要如 ...
- (24)打鸡儿教你Vue.js
学习Vue基础语法 Vue中的组件 Vue-cli的使用 1.使用Vue2.0版本实现响应式编程 2.理解Vue编程理念与直接操作Dom的差异 3.Vue常用的基础语法 4.使用Vue编写TodoLi ...
- flutter 踩坑小计: amap_base 地图缩放 zoom 设置无效的问题
这种问题估计也就我这种菜鸡能遇到了,因为我问了一些大佬,他们完全没遇到这类的问题. 如果你也遇到了,希望这篇文章能帮到你,倘若还不能解决你的问题,可以留言,我们共同研究. 问题:同样的插件,为什么偏偏 ...
- 利用HTML和CSS设计一个静态的“小米商城官网首页”
一.小项目说明 这是个例行的小项目练习,主要利用html和css的基础知识,复刻一个缩减版的小米商城网页.包括[导航栏].[头部logo区,快捷键.搜索框].[网页主体].[网页尾部]几个部分.目前只 ...
- arch linux (manjaro) 下运行tim和qq
本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/tim_install_wine 基于AUR的安装是没什么难度了, ...
- [转] Hadoop入门系列(一)Window环境下搭建hadoop和hdfs的基本操作
转自:https://blog.csdn.net/qq_32938169/article/details/80209083 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载 ...