集合论是数学的一个分支,主要由19世纪末的德国数学家康托尔创立。集合理论最初备受争议,但现在它在现代数学中扮演了基础理论的角色,这一理论被用来证明数学中关于数学对象(如数字或函数)及其性质的假设的合理性。集合理论的形式化版本也可以作为证明数学严密性的理论理想的具体说明。鉴于集合的重要性,作为数学的基础,一组古怪的理论家开始构建一台在集合而不是数字上运行的超级计算机。初始的SetStack Alpha正在构建中,他们需要您对其进行模拟,以验证原型的操作。
有一个专门为了集合运算而设计的“集合栈”计算机。该机器有一个初始为空的栈,并且支持的操作有:PUSH,DUP,UNION,INTERSECT,ADD
操作的具体定义如下:
- PUSH: 一个空的集合{}入栈
- DUP: 复制栈顶的集合(把当前栈顶的集合复制一份后再入栈)
- UNION: 出栈两个集合,然后把两个集合的并集入栈
- INTERSECT: 出栈两个集合,然后把两个集合的交集入栈
- ADD: 出栈两个集合,然后把先出栈的集合加入到后出栈的集合中,把结果入栈
每次操作后,输出栈顶集合的大小(即元素的个数),用|S|表示集合S的大小。
例如:假设栈顶的元素是A={{},{{}}},下一个元素是B={{},{{{}}}},所以集合A和B的大小分别是:|A|=2,|B|=2。则:
UNION操作得到{{},{{}},{{{}}}},输出3
INTERSECT操作得到的结果是{{}},输出1
ADD操作得到结果是{{},{{{}}},{{},{{}}}},输出3