對於乙個以集合為元素的棧,初始時棧為空。輸入的命令有如下幾種:
push:將空集{}壓棧
dup:將棧頂元素複製乙份壓入棧中
union:先進行兩次彈棧,將獲得的集合a和b取並集,將結果壓棧
intersection:先進行兩次彈棧,將獲得的集合a和b取交集,將結果壓棧
add:先進行兩次彈棧,將獲得的集合a和b中,先出棧的集合(如a先)加入到後出棧的集合,將結果壓棧
要求:輸出每一步操作後棧頂集合的元素的個數。
#include #include #include #include #include #include #include #include using namespace std;
#define all(x) x.begin(), x.end() //迭代器範圍
#define ins(x) inserter(x, x.begin()) //插入到x的begin
typedef setset; //set是乙個int的集合(看作這裡的最小單位
mapidcache; //set -->int(id,相當於編號)
vectorsetcache; //set的vec,用於找set,下標即為入棧順序
int id(set x) //接受乙個set,返回其id
int main()
s.push(id(x));
}cout << setcache[s.top()].size() << endl; //在setcache裡按棧頂元素id找到對應set,輸出其大小
}return 0;
}
inserter (container& x, typename container::iterator it)
適用所有stl容器,插入指定位置
int id(container x)
,接受乙個容器(特別在stl題中,一般將指令編號),返回乙個編號,若無,則分配編號——用id替代內容,是常規操作
#define all(x) x.begin(), x.end()
值得注意的寫法
UVa 12096 集合棧計算機
這題的話,我們讀入操作之後,首先對於空集就是初始化為空。我們可以使用typedef 對於 set 重新命名為set,這樣就可以直接用set 的語法進行空集的初始化了。這題主要是對於集合的處理,我們可以給集合乙個對映函式,這個函式對於已知集合就返回該id,讓主函式進行相應的操作。對於未知集合就按序存入...
uva 12096 集合棧計算機
uva 12096 集合棧計算機 題目 有乙個專門為了集合運算而設計的 集合棧 計算機。該機器有乙個初始為空的棧,並且 支援以下操作。push 空集 入棧。dup 把當前棧頂元素複製乙份後再入棧。union 出棧兩個集合,然後把二者的並集入棧。intersect 出棧兩個集合,然後把二者的交集入棧。...
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...