题目具体描述见:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3248

算法流程如下:

C++11代码如下:

 #include<iostream>
#include<vector>
#include<string>
#include<map>
#include<set>
#include<stack>
#include<algorithm>
#include<iterator>
using namespace std; typedef set<int> Set;
map<Set, int>IDcache;
vector<Set>Setcache; // #define ALL(x) x.begin(),x.end()
// #define INS(x) inserter(x,x,begin()) int ID(Set x) {
if (IDcache.count(x)) return IDcache[x]; //map中已有key(x),返回对应的value值
Setcache.push_back(x); //map中没有key(x),将其插入vector 中
return IDcache[x] = Setcache.size() - ; //将key(x)存入map中,并将对应的value赋值为在vector中的下标
} int main() {
int n, k;
stack<int>s;
cin >> n;
while (n--) {
cin >> k;
while (k--) {
string str;
cin >> str;
if (str[] == 'P') s.push(ID(Set())); //空集入栈
else if (str[] == 'D') s.push(s.top());
else {
Set x1 = Setcache[s.top()]; s.pop();
Set x2 = Setcache[s.top()]; s.pop();
Set x;
if (str[] == 'U') set_union(x1.begin(), x1.end(), x2.begin(), x2.end(), inserter(x, x.begin()));
if (str[] == 'I') set_intersection(x1.begin(), x1.end(), x2.begin(), x2.end(), inserter(x, x.begin()));
if (str[] == 'A') { x = x2; x.insert(ID(x1)); } //将x1的ID插入到x中
s.push(ID(x)); //合并后的x存入vector中,再将ID压入栈中
}
cout << Setcache[s.top()].size() << endl;
}
cout << "***" << endl;
}
return ;
}

集合栈计算机(UVa12096)的更多相关文章

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

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

  2. UVA12096 集合栈计算机(map和vector实现双射关系+集合的交并运算的STL)

    题目大意: 对于一个以集合为元素的栈,初始时栈为空. 输入的命令有如下几种: PUSH:将空集{}压栈 DUP:将栈顶元素复制一份压入栈中 UNION:先进行两次弹栈,将获得的集合A和B取并集,将结果 ...

  3. 5_5 集合栈计算机(UVa12096)<stack与STL其他容器的综合运用>

    有一个专门为了集合运算而设计的“集合栈”计算机.该机器有一个初始化为空的栈,并支持以下操作:( 维护 N(1≤N≤2000) 个操作, 可能的五种操作如下:) ■PUSH: 在栈顶加入一个空集合 A= ...

  4. stack 集合栈计算机 (摘)

    有一个专门为了集合运算而设计的“集合栈”计算机.该机器有一个初始为空的栈,并且支持以下操作:PUSH:空集“{}”入栈DUP:把当前栈顶元素复制一份后再入栈UNION:出栈两个集合,然后把两者的并集入 ...

  5. UVa - 12096 集合栈计算机(STL)

    [题意] 有一个专门为了集合运算而设计的“集合栈”计算机.该机器有一个初始为空的栈,并且支持以下操作:PUSH:空集“{}”入栈DUP:把当前栈顶元素复制一份后再入栈UNION:出栈两个集合,然后把两 ...

  6. 算法习题---5.5集合栈计算机(Uva12096)*****

    一:题目 对于一个以集合为元素的栈,初始时栈为空. 输入的命令有如下几种: PUSH:将空集{}压栈 DUP:将栈顶元素复制一份压入栈中 UNION:先进行两次弹栈,将获得的集合A和B取并集,将结果压 ...

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

    题目描述: #include<iostream> #include<string> #include<set> #include<map> #inclu ...

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

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

  9. 集合栈 牛客网 程序员面试金典 C++ Python

    集合栈 牛客网 程序员面试金典 C++ Python 题目描述 请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈.该数据结构应支持与普通 ...

随机推荐

  1. 百度定位api 定位不准修正

    https://www.zhihu.com/question/38313555   在安卓开发中需要设置 setCoorType("bd09lsetCoorType("bd09ll ...

  2. TCP、UDP绑定同一端口通信的解释

    昨日突然讨论起TCP与UDP是否可以在同一端口进行绑定,通信. 在印象当中我记得是可以的,今日google了相关资料, 确定以及肯定的: TCP.UDP可以绑定同一端口来进行通信: 网络中可以被命名和 ...

  3. Maven项目导出jar包配置

    <!-- 第一种打包方式 (maven-jar-plugin), 将依赖包和配置文件放到jar包外 --> <build> <sourceDirectory>src ...

  4. codevs 3235 战争

    3235 战争 http://codevs.cn/problem/3235/  时间限制: 2 s  空间限制: 128000 KB   题目描述 Description 2050年,人类与外星人之间 ...

  5. Windows Server2008 R2中的角色

    AD Certificate Services 官方说明: Active Directory 证书服务 (AD CS) 提供可自定义的服务,用于颁发和管理使用公钥技术的软件安全系统中的证书.可以使用 ...

  6. CSS3 颜色模式

    HSL .test{background-color:hsl(<length>, <percentage>, <percentage>);} 1.length 表示 ...

  7. jQuery中的text(),html(),val()的区别

    一.jquery中HTML 1. 无参html() 方法用来获取任意元素的HTML内容,如果你调用多个选定元素的.html()方法,那么其读取的只是第一个元素,换句话说:如果选择器匹配多于一个的元素, ...

  8. don't run elasticsearch as root.

    因为安全问题elasticsearch 不让用root用户直接运行,所以要创建新用户 第一步:liunx创建新用户  adduser XXX    然后给创建的用户加密码 passwd XXX    ...

  9. Cloudera Manager Admin控制台启动不起来

    这几天都在搞大数据这一块,由于以前自己在弄hadoop等安装的时候特别的费劲,于是乎找到了广大程序员的福音——cloudera manager,但是第一步安装好了以后无法启动,再三思考+百度发现: 通 ...

  10. HDFS的java接口——简化HDFS文件系统操作

    今天闲来无事,于是把HDFS的基本操作用java写出简化程序出来给大家一些小小帮助! package com.quanttech; import org.apache.hadoop.conf.Conf ...