做网站比较好的软件,论坛模板,注册城乡规划师报名时间,网站建设备案流程UVA 12096 集合栈计算机题目描述有一个专门为了集合运算而设计的“集合栈”计算机。该机器有一个初始为空的栈#xff0c;并且支持以下操作。PUSH#xff1a;空集“{}”入栈。DUP#xff1a;把当前栈顶元素复制一份后再入栈。UNION#xff1a;出栈两个集合#xff0c;然后…UVA 12096 集合栈计算机题目描述有一个专门为了集合运算而设计的“集合栈”计算机。该机器有一个初始为空的栈并且支持以下操作。PUSH空集“{}”入栈。DUP把当前栈顶元素复制一份后再入栈。UNION出栈两个集合然后把二者的并集入栈。INTERSECT出栈两个集合然后把二者的交集入栈。ADD出栈两个集合然后把先出栈的集合加入到后出栈的集合中把结果入栈。每次操作后输出栈顶集合的大小(即元素个数)。知识补充C stackstack一个先进先出的堆栈常用方法 empty pop push size topempty() 堆栈为空则返回真pop() 移除栈顶元素push() 在栈顶增加元素size() 返回栈中元素数目top() 返回栈顶元素代码实现//摘自刘汝佳#include#inlcude#include#include#includetypedef set Set;map idache;vector setcache;#define all(x) x.begin(),x.end();#define ins(x) inserter(x,x.begin())int id(set x){if(idache.count(x))return idache[x];setcache.push_back(x);return idache[x]setcache.size()-1;}stack s;int n;cinn;for(int i0;istring op;cinop;if(op[0]p)s.push(id(set()));if(op[0]D)s.push(s.top());else{set x1setcache[s.top()];s.pop();set x2setcache[s.top()];s.pop();set x;if (op[0] U) set_union (ALL(x1), ALL(x2), INS(x));if (op[0] I) set_intersection (ALL(x1), ALL(x2), INS(x));if (op[0] A) { x x2; x.insert(ID(x1)); }s.push(ID(x));}cout}by制杖菜鸡