uva计算机水平,UVA 12096 集合栈计算机
UVA 12096 集合棧計算機
題目描述
有一個專門為了集合運算而設計的“集合棧”計算機。該機器有一個初始為空的棧,并且
支持以下操作。
PUSH:空集“{}”入棧。
DUP:把當前棧頂元素復制一份后再入棧。
UNION:出棧兩個集合,然后把二者的并集入棧。
INTERSECT:出棧兩個集合,然后把二者的交集入棧。
ADD:出棧兩個集合,然后把先出棧的集合加入到后出棧的集合中,把結果入棧。
每次操作后,輸出棧頂集合的大小(即元素個數)。
知識補充:C++ stack
stack一個先進先出的堆棧
常用方法 empty pop push size top
empty() 堆棧為空則返回真
pop() 移除棧頂元素
push() 在棧頂增加元素
size() 返回棧中元素數目
top() 返回棧頂元素
代碼實現
//摘自劉汝佳
#include
#inlcude
#include
#include
#include
typedef 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;
cin>>n;
for(int i=0;i
string op;
cin>>op;
if(op[0]=='p')
s.push(id(set()));
if(op[0]=='D')
s.push(s.top());
else
{
set x1=setcache[s.top()];
s.pop();
set x2=setcache[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制杖菜雞
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的uva计算机水平,UVA 12096 集合栈计算机的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件测试工资高还是运维高,IT行业的6大
- 下一篇: linux 2G内存够用吗,不管2G还是