UVa 12096 集合棧計算機

2022-04-08 17:53:18 字數 1121 閱讀 7900

對於乙個以集合為元素的棧,初始時棧為空。

輸入的命令有如下幾種:

​ 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...