BZOJ1932 [Shoi2007]Setstack 集合堆栈机
妈呀。。。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 集合堆栈机的更多相关文章
- BZOJ1932——[Shoi2007]Setstack 集合堆栈机
1.题目大意:就是给你一个栈,有一些操作,向栈加入空集,把栈顶的元素复制一遍再加入栈,求栈顶两元素的并集,交集 还有栈的第一个元素和栈顶(将栈顶压缩成一个元素) 2.分析:这个其实不是用hash做的, ...
- 2018.08.28 集合堆栈机(模拟+STL)
描述 中学数学里集合的元素往往是具体的数字,比如A = {1,2,3},B = {}(空集)等等.但是要特别注意,集合的元素也可以是另一个集合,比如说C = {{}},即说明C有且仅有一个元素--空集 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- [译]Python编写虚拟解释器
使用Python编写虚拟机解释器 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环 ...
- 零基础学Python--------第4章 序列的应用
第4章 序列的应用 4.1序列 序列是一块用于存放多个值的连续内存空间,并且按上一定顺序排列,每一个值(称为元素)都分配一个数字,称为索引或位置.通过该索引可以取出相应的值.例如,我们可以把一家酒店看 ...
- 【转】CLR和JIT的理解、.NET反汇编学习
CLR:通用语言运行时(Common Language Runtime)的简称,CLR是.NET框架的核心内容之一,可以把它看为一套标准资源,可以呗任何.NET程序使用.它包括:面向对象的编程模型.安 ...
- Atitit.虚拟机与指令系统的设计
Atitit.虚拟机与指令系统的设计 1. 两种计算模型 ,堆栈机和状态机(基于寄存器的虚拟机1 1.1.1. 堆栈机1 1.1.2. 状态机2 2. 为什么状态机比堆栈机快呢?3 2.1. Sta ...
- (Python编程)Pickle对象
Programming Python, 3rd Edition 翻译 最新版本见:http://wiki.woodpecker.org.cn/moin/PP3eD 19.4. Pickled Obje ...
- centos 7 搭建 LNMP ( Linux+Nginx+MySQL+PHP )
操作系统 | CentOS Linux release 7.6.1810 (Core) [root@localhost ~# cat /etc/redhat-release CentOS Linux ...
随机推荐
- iOS - Swift Range 范围
前言 Range:结构体,这个结构体用来表示一个区间的范围. public struct Range<Element : ForwardIndexType> : Equatable, Co ...
- iOS - UIColor
前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIColor : NSObject <NSSecureCoding, NSCopying> @avai ...
- C++ ASSERT() 断言机制
C++ ASSERT() 断言机制 ASSERT()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行.如果表达式不为0,则继 ...
- Java 日期往后推迟n天
在Java中经常会遇到,以指定的日期为基准,计算向后n天<n可以为正.负数,负数为向前移>. 这时需要在Date类的基础上使用Calendar类,处理方法基本如下: import java ...
- Maven核心概念之依赖,聚合与继承
一.依赖 我们项目中依赖的jar包可以通过依赖的方式(dependencies元素下添加dependency子元素)引入. <dependency> <groupId>juni ...
- JdbcTemplate操作数据库
1.JdbcTemplate操作数据库 Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中.同时,为了支 ...
- css技术和实例
今天,我为大家收集精选了30个使用纯CSS完成的强大实践的优秀CSS技术和实例,您将在这里发现很多与众不同的技术,比如:图片集.阴影效果.可扩展按钮.菜单等-这些实例都是使用纯CSS和HTML实现的. ...
- Android手机分辨率基础知识(DPI,DIP计算)二
dp = dip : device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不 ...
- 【服务器环境搭建-Centos】常用系统命令篇
uname -a 查看系统信息
- Sqlserver_自定义函数操作
use Test go if exists( SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'gettime') AND type in ...