uva12096集合棧計算機

2022-07-09 20:18:14 字數 1415 閱讀 6123

預備知識

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_union(a.begin(),a.end(),a.begin(),a.end(),inserter( c , c.begin() ) );

inserter()的第二個引數是乙個指向給定容器的迭代器。元素將被插入到給定迭代器所表示的元素之前*/

cout<2.求並集:

set_intersection(a.begin(),a.end(),b.begin(),b.end(),inserter(c,c.begin()));//最後乙個引數不可用c.begin(),否則會無法執行,也不可令it=set_union

巨集定義

#define all(x) x.begin(),x.end()

#define ins(x) inserter(x,x.begin())

題目

push:向棧中放乙個空集合。

dup:複製棧頂集合。

union:取棧頂的兩個集合,取並集後放回。

intersect:取棧頂的兩個集合,取交集後放回。

add:取棧頂兩個集合,將頂集合作為元素放到第二個集合中,並將第二個集合放回棧。

每次操作後輸出棧定集合中元素的個數。

**

#include #include #include #include #include #include #define all(x) x.begin(),x.end()

#define ins(x) inserter(x,x.begin())

using namespace std;

typedef setset;//預設建構函式set()創造乙個空set

mapidcache; //將集合對映為乙個id

vectorsetcache; //根據id來取集合

//搜尋集合x是否已經存在id,若無則分配乙個id

int id(set x)

int main()

s.push(id(x));

}cout << setcache[s.top()].size() << endl;//輸出每一步操作後棧頂集合的元素的個數。

}cout << "***" << endl;

}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 先進行兩次彈棧,將獲得的...