這題思想在於:轉化
用集合去套集合是明顯不行的(可能也是我菜)
所以 可以給每個不一樣的集合分配乙個id, 用map
那麼我們對於集合棧而言就只要存「整型」(即每個集合的id即可)
而那光存id沒用啊,如果用到集合咋整,所以再開個 map 用id找他所對應的集合
此時的 pull 和 dup 就解決了
還有三個分別交、並、舔 ,肯定就是拉出她們對應的集合搞事情,
這時的我們要明白,我們存的集合內究竟是什麼東西,對!聰明!就是被他包括的集合的id!也就是說,如果遇到新增 a集合 到 b集合,那麼只要把 a集合的id新增到 b集合 即可!
交集、並集用用set內部函式,
只要注意下初始化這道題ok了!(stack 無法好好的初始化,所以直接開在內部了…不然要寫 for)
上**
#include using namespace std;
#define all(x) x.begin(),x.end()
#define ins(x) inserter(x,x.begin())
typedef setset;
mapid;
mapduiset;
int n;// 計數
int m;
int getid(set x)
int main()
zhan.push(getid(x));
} cout<} cout<<"***"<}
return 0;
}
UVa 12096 集合棧計算機
這題的話,我們讀入操作之後,首先對於空集就是初始化為空。我們可以使用typedef 對於 set 重新命名為set,這樣就可以直接用set 的語法進行空集的初始化了。這題主要是對於集合的處理,我們可以給集合乙個對映函式,這個函式對於已知集合就返回該id,讓主函式進行相應的操作。對於未知集合就按序存入...
uva 12096 集合棧計算機
uva 12096 集合棧計算機 題目 有乙個專門為了集合運算而設計的 集合棧 計算機。該機器有乙個初始為空的棧,並且 支援以下操作。push 空集 入棧。dup 把當前棧頂元素複製乙份後再入棧。union 出棧兩個集合,然後把二者的並集入棧。intersect 出棧兩個集合,然後把二者的交集入棧。...
UVa 12096 集合棧計算機
對於乙個以集合為元素的棧,初始時棧為空。輸入的命令有如下幾種 push 將空集 壓棧 dup 將棧頂元素複製乙份壓入棧中 union 先進行兩次彈棧,將獲得的集合a和b取並集,將結果壓棧 intersection 先進行兩次彈棧,將獲得的集合a和b取交集,將結果壓棧 add 先進行兩次彈棧,將獲得的...