2018 08 28 集合堆疊機(模擬 STL)

2021-08-26 05:13:04 字數 1836 閱讀 5264

描述

中學數學裡集合的元素往往是具體的數字,比如a = ,b = {}(空集)等等。但是要特別注意,集合的元素也可以是另乙個集合,比如說c = },即說明c有且僅有乙個元素——空集b,所以稱b是c的子集或者稱b是c的元素都是正確的。所謂乙個集合的勢,就是這個集合的元素個數,一般記為|s|,空集的勢為0。在上例中,|a| = 3,|b| = 0,|c| = 1。 鑑於集合論是現代數學的基礎理論這一事實,一群異想天開的科學家開始著手建造一台新式的超級計算機——集合堆疊機alpha,這台機器操作的將是集合而不是數字。不過由於alpha的竣工之日遙遙無期,科學家們希望你為他們編寫一台虛擬機器,好讓他們檢查自己的原型設計是否合理。 alpha的儲存裝置只有乙個棧,棧的每個單元都只能放置乙個集合。一開始,棧是空的,在每個操作結束後,計算機就會輸出位於棧頂單元的那個集合的勢。alpha擁有五種不同的指令,分別為:push、dup、union、intersect和add,他們的功能如下:

push: 把乙個空集{}壓入棧;

dup: 取出位於棧頂單元的集合,複製一遍以後再把兩個同樣的集合壓入棧;

union: 取出位於棧頂單元的前兩個集合,然後把它們的並集壓入棧;

intersect: 取出位於棧頂單元的前兩個集合,然後把它們的交集壓入棧;

add: 取出位於棧頂單元的前兩個集合,首先取出的記為s,其次取出的記為t,最後把t∪壓入棧;

圖為例,可見位於虛擬機器堆疊頂端的兩個元素是:

a = , } }

b = , }} }

根據勢的定義,我們有|a| = 2 以及 |b| = 2。接下來,

 如果選擇union操作,結果是,},}},輸出3

 如果選擇intersect操作,結果是},輸出1

 如果選擇add操作,結果是,}},,}}},輸出3

分別執行三條指令之後虛擬機器就會變成以下三種樣子:

輸入檔案的第一行只有乙個整數n(0≤n≤2000),代表將要執行的指令條數。接下來有n行,每行有包含一條大寫的指令,我們保證每條指令都是上述五條指令中的一條,並且虛擬機器總是能正確執行完所有的指令。

輸出輸出虛擬機器的輸出結果即可。每行輸出乙個大於或等於0的整數,代表虛擬機器執行該條指令後的輸出。選手們務必仔細考量程式的執行效率。

樣例輸入

9 push

dup

add

push

add

dup

add

dup

union

樣例25

push

push

add

push

intersect

樣例輸出

0 0

1 0

1 1

2 2

2樣例2

0 0

1 0 0標籤

shoi2007

#include

using

namespace

std;

struct cmp

};stack

stk;

map,int,cmp>mp;

vector

>vec;

inline

int findid(set

x)int main()

cout

}return

0;}

python3集合 Python3 集合

集合 set 是乙個無序的不重複元素序列。可以使用大括號 或者 set 函式建立集合,注意 建立乙個空集合必須用 set 而不是 因為 是用來建立乙個空字典。建立格式 parame 或者set value 這裡演示的是去重功能 orange in basket 快速判斷元素是否在集合內 true c...

python3集合 Python3 集合

python3 集合 集合 set 是乙個無序的不重複元素序列。可以使用大括號或者set 函式建立集合,注意 建立乙個空集合必須用set 而不是,因為是用來建立乙個空字典。集合內建方法 add 為集合新增元素 例項 fruits.add orange print fruits 輸出結果為 clear...

2018 3 28 集合框架

1.迭代器的作用 為集合而生,用來專門遍歷集合中的元素 2.collection介面中的iterator 方法返回乙個iterator 通過iterator介面的兩個方法即可方便實現遍歷 hasnext 判斷是否存在另乙個可訪問的元素 next 返回要訪問的下乙個元素 3.map類使用迭代器遍歷元素...