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 ...
随机推荐
- eclipse svn异常:RA layer request failed 的解决方案
这几天svn总是出问题,网上搜了好多资料,今天才真正找到解决办法. RA layer request failedsvn: OPTIONS of 'https://192.168.0.104/svn/ ...
- iOS : 静态库制作
一.静态库简介 1. 什么是库? 库 就是程序代码的集合, 是共享程序代码的一种方式 2. 库的分类? 开源库 公开源代码, 能看到具体实现 例如MJExtension, MJRefresh, AFN ...
- 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 ...
- XAF应用开发教程(二)业务对象模型之简单类型属性
使用过ORM的朋友对这一部分理解起来会非常快,如果没有请自行补习吧:D. 不说废话,首先,我们来开发一个简单的CRM系统,CRM系统第一个信息当然是客户信息.我们只做个简单 的客户信息来了解一下XAF ...
- AJAX 简介
什么是 AJAX ? AJAX = 异步 JavaScript 和 XML. AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味 ...
- c++ ,类型转换
一.隐式转换 1)精度低转高,sigend转unsigend2)数值0,会转为为指针. 数组名会转换为首地址.3)bool转换 .0为false.其他为true.-1也是true...4)非const ...
- HDU 1754
成段更新 easy #include <stdio.h> #include <string.h> #include <math.h> #include <io ...
- Connection的使用
package com.cz.test.util.collection; import java.util.ArrayList;import java.util.Collection;import j ...
- 【转】分析Linux和windows动态库
原文地址:http://www.cnblogs.com/chio/archive/2008/11/13/1333119.html 摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Lin ...
- Maven——eclipse中使用Maven创建Web项目
原文:http://www.cnblogs.com/xdp-gacl/p/4054814.html 一.创建Web项目 1.1 选择建立Maven Project 选择File -> New - ...