题目名称 1095. [省常中] 集合堆栈电脑
输入输出 stacka.in/out
难度等级
时间限制 1000 ms (1 s)
内存限制 128 MiB
测试数据 10
题目来源 GravatarMakazeu 于2012-10-03加入
开放分组 全部用户
提交状态
分类标签
分享题解
通过:2, 提交:7, 通过率:28.57%
Gravatar 100 0.624 s 1.99 MiB C++
Gravatar夜莺 100 1.783 s 13.66 MiB C++
GravatarMakazeu 90 0.153 s 2.28 MiB C++
Gravatar 80 2.809 s 2.38 MiB C++
Gravatar老师,勿删 70 2.397 s 0.31 MiB C++
Gravatar能流零念 20 0.515 s 13.66 MiB C++
Gravatar能流零念 0 0.005 s 13.66 MiB C++
关于 集合堆栈电脑 的近10条评论(全部评论)
颓废后的第一道通过了的题!果然颓废后不抄抄书不行吗(还是大抄特抄那种)?
Gravatar夜莺
2020-07-03 21:33 3楼
一个集合不是不能有相同元素的吗
Gravatar天下第一的吃货殿下
2012-10-04 18:23 2楼
擦,最后这一组不知道哪错了~
GravatarMakazeu
2012-10-03 11:49 1楼

1095. [省常中] 集合堆栈电脑

★   输入文件:stacka.in   输出文件:stacka.out   简单对比
时间限制:1 s   内存限制:128 MiB

【题目描述】


wikipedia上提供的一段背景资料:“集合理论是数学理沦的一个分支,它主要由德国数学家Georg cantor在19世纪末创立。集合理论已经逐渐成为现代数学的基本理论。正式的集合理论学说为数学证明的严格性提供了保障。”

一些古怪的理论工作者开始构造一个超级计算机,用来实现集合之间的操作,而不再是数字之间的操作。他们希望你来帮他们模拟一下集合运算的过程。

计算机的操作对象是一个以集合为元素的栈,一开始这个栈是空的。在每一步操作之后,栈顶集合中所含元素的个数是需要你输出的东西。计算机的操作指令有PUSH,DUP,UNION,INTERSECT,ADD。

·PUSH操作将一个空集合{}入栈

·DUP操作将把一个和栈顶元素相同的集合入栈

·UNION操作进行两次出栈操作,并且把出栈的两个集合的并入栈

·INTERSECT操作进行两次出栈操作,并且把出栈的两个集合的交入栈

·ADD操作进行两次出栈操作,并且把第一个出栈的集合作为一个元素,放入第二个出栈的集合中,然后把这个结果入栈

举一个例子,假设栈顶的元素是A={{},{{}}},而它下面的一个元素是B={{},{{{}}}}。

显然,集合A有2个元素,集弁B也是。对于这个情况:

·UNION操作会产生集合{{},{{}},{{{}}}},这个集合有3个元素,所以要输出3

·INTERSECT操作会产生{{}},所以要输出1

·ADD操作会产生{{},{{{}}},{{},{{}}}},所以要输出3


【输入格式】

第一行一个整数N,保证0≤N≤2000。

接着的N行,每行有一条指令。保证输入的指令是合法的,不会出现让你在一个空的栈中弹出元素的情况。


【输出格式】

对于输入中的每一条指令,输出执行指令之后栈顶集合里的元素个数。


【样例输入】

9
PUSH
DUP
ADD
PUSH
ADD
DUP
ADD
DUP
UNION

【样例输出】

0
0
1
0
1
1
2
2
2