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