uva 12096 集合棧計算機
題目:有乙個專門為了集合運算而設計的「集合棧」計算機。該機器有乙個初始為空的棧,並且 支援以下操作。
push:空集「{}」入棧。
dup:把當前棧頂元素複製乙份後再入棧。
union:出棧兩個集合,然後把二者的並集入棧。
intersect:出棧兩個集合,然後把二者的交集入棧。
add:出棧兩個集合,然後把先出棧的集合加入到後出棧的集合中,把結果入棧。
每次操作後,輸出棧頂集合的大小(即元素個數)。
例如,棧頂元素是a=, }},下乙個元素是b=,}}},
則: union操作將得到,},}}},輸出3。
intersect操作將得到},輸出1。
add操作將得到,}},,}}},輸出3。
輸入不超過2000個操作,並且保證操作均能順利進行(不需要對空棧執行出棧操作)
剛開始沒看懂題目的add操作,興沖沖地開了個結構體就開始莽,後來,,,跑了遍樣例發現,,,add操作是集合套集合啊(俄羅斯套娃嗚嗚嗚~~~),然後心底一涼,可咋整
無奈看題解
1. stl中的set 有內建的求交集,並集,差集的函式
2.給每個不同的set分配乙個唯一的id
UVa 12096 集合棧計算機
這題的話,我們讀入操作之後,首先對於空集就是初始化為空。我們可以使用typedef 對於 set 重新命名為set,這樣就可以直接用set 的語法進行空集的初始化了。這題主要是對於集合的處理,我們可以給集合乙個對映函式,這個函式對於已知集合就返回該id,讓主函式進行相應的操作。對於未知集合就按序存入...
UVa 12096 集合棧計算機
對於乙個以集合為元素的棧,初始時棧為空。輸入的命令有如下幾種 push 將空集 壓棧 dup 將棧頂元素複製乙份壓入棧中 union 先進行兩次彈棧,將獲得的集合a和b取並集,將結果壓棧 intersection 先進行兩次彈棧,將獲得的集合a和b取交集,將結果壓棧 add 先進行兩次彈棧,將獲得的...
uva12096集合棧計算機
預備知識 set 1.求交集 int a 5 int b 5 vectorc 10 一定要指定大小,否則會無法執行 vector iterator it it set union a,a 5,b,b 5,c.begin set union返回最後乙個元素後的位址,自動去重 或者it set unio...