UVa 12096 集合棧計算機(STL)

2022-05-11 15:21:34 字數 1268 閱讀 3246

【題意】

有乙個專門為了集合運算而設計的「集合棧」計算機。該機器有乙個初始為空的棧,並且支援以下操作:

push:空集「{}」入棧

dup:把當前棧頂元素複製乙份後再入棧

union:出棧兩個集合,然後把兩者的並集入棧,並輸出並集的size

intersect:出棧兩個集合,然後把二者的交集入棧,並輸出交集的size

add:出棧兩個集合,然後把先出棧的集合加入到後出棧的集合中,把結果入棧,並輸出結果的size

每次操作後,輸出棧頂集合的大小(即元素個數)。例如棧頂元素是a=, } }, 下乙個元素是b=, }} },則:

union操作將得到, }, }} },輸出3.

intersect操作將得到 },輸出1

add操作將得到, }}, , } } },輸出3.

其他操作輸出0

多組輸入輸出,每組輸出後輸出一行「 *** 」

輸入不超過2000個操作

sample input29

push

dupadd

push

adddup

adddup

union

5push

push

addpush

intersect

sample output00

1011

222***00

100***

【**】

#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())

//感覺這兩個巨集用的真的厲害typedef

setset;

mapint>idcache;

vector

setcache;

intid(set x) //找到集合x在列表中的代表id

intmain()

s.push(id(sum));

}printf(

"%d\n

", setcache[s.top()].size());

}printf(

"***\n");

}}

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