妈呀。。。clj大爷太强啦!

原来还有set_union和set_intersection这种东西。。。

于是只要把栈顶的每个元素hash一下记录到一个vector里去就好了

 /**************************************************************
Problem: 1932
User: rausen
Language: C++
Result: Accepted
Time:148 ms
Memory:3372 kb
****************************************************************/ #include <cstdio>
#include <vector>
#include <stack>
#include <algorithm> using namespace std;
typedef unsigned long long ull;
typedef vector <ull> vec;
const int N = 2e3 + ;
const int base = ; inline ull add(const vec &v) {
static ull res;
static int i;
for (i = res = ; i < v.size(); ++i)
res *= base, res += v[i] + ;
return res;
} inline void get(vec &v) {
sort(v.begin(), v.end());
v.resize(unique(v.begin(), v.end()) - v.begin());
} int n, top;
vec S[N]; int main() {
int i;
char st[];
vec a, b, c(N);
scanf("%d",&n);
for (i = ; i <= n; ++i) {
scanf("%s", st + );
if (st[] == 'P') {
S[++top] = vec();
goto end;
}
if (st[] == 'D') {
++top, S[top] = S[top - ];
goto end;
}
a = S[top--], b = S[top--];
if (st[] == 'A') {
b.push_back(add(a)), get(b);
S[++top] = b;
goto end;
}
c = vec(a.size() + b.size());
if (st[] == 'U') {
c.resize(set_union(a.begin(), a.end(), b.begin(), b.end(), c.begin()) - c.begin());
get(c), S[++top] = c;
goto end;
}
if (st[] == 'I') {
c.resize(set_intersection(a.begin(), a.end(), b.begin(), b.end(), c.begin()) - c.begin());
get(c), S[++top] = c;
goto end;
}
end : printf("%d\n", S[top].size());
}
return ;
}

BZOJ1932 [Shoi2007]Setstack 集合堆栈机的更多相关文章

  1. BZOJ1932——[Shoi2007]Setstack 集合堆栈机

    1.题目大意:就是给你一个栈,有一些操作,向栈加入空集,把栈顶的元素复制一遍再加入栈,求栈顶两元素的并集,交集 还有栈的第一个元素和栈顶(将栈顶压缩成一个元素) 2.分析:这个其实不是用hash做的, ...

  2. 2018.08.28 集合堆栈机(模拟+STL)

    描述 中学数学里集合的元素往往是具体的数字,比如A = {1,2,3},B = {}(空集)等等.但是要特别注意,集合的元素也可以是另一个集合,比如说C = {{}},即说明C有且仅有一个元素--空集 ...

  3. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  4. [译]Python编写虚拟解释器

    使用Python编写虚拟机解释器 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环 ...

  5. 零基础学Python--------第4章 序列的应用

    第4章 序列的应用 4.1序列 序列是一块用于存放多个值的连续内存空间,并且按上一定顺序排列,每一个值(称为元素)都分配一个数字,称为索引或位置.通过该索引可以取出相应的值.例如,我们可以把一家酒店看 ...

  6. 【转】CLR和JIT的理解、.NET反汇编学习

    CLR:通用语言运行时(Common Language Runtime)的简称,CLR是.NET框架的核心内容之一,可以把它看为一套标准资源,可以呗任何.NET程序使用.它包括:面向对象的编程模型.安 ...

  7. Atitit.虚拟机与指令系统的设计

    Atitit.虚拟机与指令系统的设计 1. 两种计算模型  ,堆栈机和状态机(基于寄存器的虚拟机1 1.1.1. 堆栈机1 1.1.2. 状态机2 2. 为什么状态机比堆栈机快呢?3 2.1. Sta ...

  8. (Python编程)Pickle对象

    Programming Python, 3rd Edition 翻译 最新版本见:http://wiki.woodpecker.org.cn/moin/PP3eD 19.4. Pickled Obje ...

  9. centos 7 搭建 LNMP ( Linux+Nginx+MySQL+PHP )

    操作系统 | CentOS Linux release 7.6.1810 (Core) [root@localhost ~# cat /etc/redhat-release CentOS Linux ...

随机推荐

  1. eclipse svn异常:RA layer request failed 的解决方案

    这几天svn总是出问题,网上搜了好多资料,今天才真正找到解决办法. RA layer request failedsvn: OPTIONS of 'https://192.168.0.104/svn/ ...

  2. iOS : 静态库制作

    一.静态库简介 1. 什么是库? 库 就是程序代码的集合, 是共享程序代码的一种方式 2. 库的分类? 开源库 公开源代码, 能看到具体实现 例如MJExtension, MJRefresh, AFN ...

  3. Codeforces Round #375 (Div. 2) D. Lakes in Berland dfs

    D. Lakes in Berland time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  4. XAF应用开发教程(二)业务对象模型之简单类型属性

    使用过ORM的朋友对这一部分理解起来会非常快,如果没有请自行补习吧:D. 不说废话,首先,我们来开发一个简单的CRM系统,CRM系统第一个信息当然是客户信息.我们只做个简单 的客户信息来了解一下XAF ...

  5. AJAX 简介

    什么是 AJAX ? AJAX = 异步 JavaScript 和 XML. AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味 ...

  6. c++ ,类型转换

    一.隐式转换 1)精度低转高,sigend转unsigend2)数值0,会转为为指针. 数组名会转换为首地址.3)bool转换 .0为false.其他为true.-1也是true...4)非const ...

  7. HDU 1754

    成段更新 easy #include <stdio.h> #include <string.h> #include <math.h> #include <io ...

  8. Connection的使用

    package com.cz.test.util.collection; import java.util.ArrayList;import java.util.Collection;import j ...

  9. 【转】分析Linux和windows动态库

    原文地址:http://www.cnblogs.com/chio/archive/2008/11/13/1333119.html 摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Lin ...

  10. Maven——eclipse中使用Maven创建Web项目

    原文:http://www.cnblogs.com/xdp-gacl/p/4054814.html 一.创建Web项目 1.1 选择建立Maven Project 选择File -> New - ...