uva 12096 The SetStack Computer

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

点击打开链接uva 12096

思路: STL模拟
分析:
1 题目给定5种操作,每次输出栈顶集合的元素的个数
2 利用stack和set来模拟,set保存集合的元素。遇到push的时候直接在stack里面push入一个空的set,遇到Dup的时候把栈顶的集合在push进stack一次,遇到union的时候把栈顶的两个集合合并,遇到Intersect的时候把栈顶的两个集合进行求交集然后push进stack,遇到Add的时候要注意如果第一个集合是空集那么我们就认为是在第二个集合里面加入2,否则就要通过map来判断当前的集合所表示的值

代码:

#include<set>
#include<map>
#include<stack>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

const int N = 20;
const int MAXN = 2010;

int cnt;
stack<set<int> >stk;
map<set<int> , int>mp;
set<int>s1 , s2;

void pop(){
    s1 = stk.top();
    stk.pop();
    
    s2 = stk.top();
    stk.pop();
}
// push
void Push(){
    set<int>s;
    stk.push(s);
    puts("0");
}
// dup 
void Dup(){
    set<int>s;
    s = stk.top();
    stk.push(s);
    printf("%d\n" , s.size());
}
// union 
void Union(){
    pop();
    // 
    set<int>::iterator it;
    for(it = s1.begin() ; it != s1.end() ; it++)
        s2.insert(*it);
    stk.push(s2);
    printf("%d\n" , s2.size());
}
// Intersect
void Intersect(){
    pop();
    //
    set<int>s3;
    set<int>::iterator it;
    for(it = s1.begin() ; it != s1.end() ; it++){
        if(s2.find(*it) != s2.end())   
            s3.insert(*it); 
    }
    stk.push(s3);
    printf("%d\n" , s3.size());
}
// add
void Add(){
    pop();
    //
    if(s1.empty())
        s2.insert(0); 
    else{
        if(!mp[s1])
            mp[s1] = cnt++;
        s2.insert(cnt++);
    }
    stk.push(s2);
    printf("%d\n" , s2.size());
}

int main(){
    int Case , n;
    char str[N];
    scanf("%d" , &Case);
    while(Case--){
        scanf("%d" , &n); 
        while(!stk.empty())
            stk.pop();
        cnt = MAXN;
        mp.clear();
        while(n--){
            scanf("%s" , str); 
            if(str[0] == 'P')
                Push();
            else if(str[0] == 'D')
                Dup();
            else if(str[0] == 'U')
                Union();
            else if(str[0] == 'I')
                Intersect();
            else
                Add();
        } 
        puts("***");
    }
    return 0;
}



目录
相关文章
|
11月前
|
移动开发 数据可视化 小程序
高颜值可视化设计UNIAPP源码生成器
高颜值可视化设计UNIAPP源码生成器
177 1
|
NoSQL Java 关系型数据库
想要入职大厂,应该如何准备八股文?方法论分享!
想要入职大厂,应该如何准备八股文?方法论分享!
588 0
|
网络协议
Wireshark基础及使用
Wireshark-- 网络分析工具 基础及使用
Wireshark基础及使用
阿里云com域名多少钱一年?注册续费和转入价格来了
阿里云com域名多少钱一年?阿里云企业新用户注册com域名1元首年,个人新用户注册com域名价格是33元首年,阿里云老用户注册com域名价格为69元一年,com域名第二年续费使用优惠口令后价格为69元一年。新手站长来详细说下阿里云com域名注册、续费、转入收费标准及活动报价
3494 0
阿里云com域名多少钱一年?注册续费和转入价格来了
【Python刷题记录】Day1-选择题
整形变量x中存放了一个两位数,要将这个两位数的个位数的个位数字和十位数字交换位置,例如,13变成31,正确的Python表达式是什么?
|
Web App开发 安全 数据安全/隐私保护
阿里云Web应用防火墙接入案例分享之http2.0
一、概述 阿里云云盾Web应用防火墙(Web Application Firewall, 简称 WAF)是一款网络安全产品,基于云安全大数据能力,用于防御SQL注入、XSS跨站脚本、常见Web服务器插件漏洞、木马上传、非授权核心资源访问等OWASP常见攻击,并过滤海量恶意CC攻击;在本篇文章中,笔者通过两个http2.0业务的接入案例分享,给后续的业务接入提供参考借鉴的地方。
阿里云Web应用防火墙接入案例分享之http2.0
Vue3.js中使用svg:vite-plugin-svg-icons
Vue3.js中使用svg:vite-plugin-svg-icons
932 0
|
数据可视化 算法 测试技术
都996了,研发效能还是提不起来,关键在这里
上一篇我们介绍了研发效能提升目标及其度量方法。(本文是阿里“研发效能提升系列”的第2篇,第1篇“研发效能的定义和度量”敬请期待【下周三】的钉钉群直播:钉钉搜索群号 23192180) 研发效能的提升必须落实为团队需求、协作和工程技术等实践。
6677 1
都996了,研发效能还是提不起来,关键在这里
组态王、力控、MCGS、瑞尔、杰控等国内组态软件一点看法
从结构上说,组态王和MCGS一样,前台动画和后台集成在一起,在运行模式下一起运行。而力控、瑞尔却分为后台驱动、实时数据库、前台三部分组成,更为有意思的是,瑞尔的每一个驱动就是一个EXE,其驱动DLL的接口和力控的一致,不知他们是同出一源,还是互为“切磋”!
5516 0
|
存储 边缘计算 分布式计算
阿里云边缘计算与云边端协同网络的融合与挑战
本文来自阿里云高级技术专家张毅萍(屹平)的分享原文,阐述了他对边缘计算的理解、阿里云边缘计算的布局及云边端三体协同网络的融合与挑战。
6257 0
阿里云边缘计算与云边端协同网络的融合与挑战