有乙個專門為了集合運算而設計的"集合棧"計算機。該機器有乙個初始化為空的棧,並且支援以下操作。
每次操作後,輸出棧頂集合的大小(即元素的個數)。分析:
這裡的集合並不是簡單整數集合或者字元集合,而是集合的集合。為了方便起見,此處為每個不同的集合分配乙個唯一的id,則每個集合都可以表示成所包含元素的id集合,這樣就可以用stl的set
來表示了,而整個棧就是乙個stack
。
#include
#include
#include
#include
#include
#include
using namespace std;
typedef set<
int> set;
// 把集合對映成id
mapint> idcache;
vector setcache;
// 根據id取集合
// 查詢給定集合x的id,如果找不到,分配乙個新的id
intid
(set x)
setcache.
push_back
(x);
// 新增新集合
return idcache[x]
= setcache.
size()
-1;}
// 對任意集合s(型別set), idcache[s]就是它的id,而setcache[idcache[s]]就是s本身
#define all(x) x.begin(), x.end()
#define ins(x) inserter(x, x.begin())
// 分別表示所有內容以及插入迭代器
intmain()
else
if(op[0]
=='d'
)else
if(op[0]
=='i')if
(op[0]
=='a'
) s.
push(id
(x));}
cout << setcache[s.
top()]
.size()
<< endl;
}return0;
}
集合棧計算機
集合棧計算機 題目是這樣的 有乙個專門為了集合運算而設計的 集合棧 計算機。該機器有乙個初始為空的棧,並且支援以下操作 push 空集 入棧 dup 把當前棧頂元素複製乙份後再入棧 union 出棧兩個集合,然後把兩者的並集入棧 intersect 出棧兩個集合,然後把二者的交集入棧 add 出棧兩...
集合棧計算機
有乙個專門為了集合運算而設計的 集合棧 計算機。該機器有乙個初始為空的棧,並且支援以下操作 push 空集 入棧 dup 把當前棧頂元素複製乙份後再入棧 union 出棧兩個集合,然後把兩者的並集入棧 intersect 出棧兩個集合,然後把二者的交集入棧 add 出棧兩個集合,然後把先出棧的集合加...
計算機棧原理
記憶體的不同用途 根據不同的作業系統,乙個程序可能被分配到不同的記憶體區域去執行。但是不管什麼樣的作業系統 什麼樣的計算機架構,程序使用的記憶體都可以按照功能大致分為以下4個部分 1 區 這個區域儲存著被裝入執行的二進位制機器 處理器會到這個區域取指並執行。2 資料區 用於儲存全域性變數等。3 堆區...