uva 12096 - The SetStack Computer(STL)

來源:互聯網
上載者:User

標籤:style   http   color   os   io   for   ar   代碼   

UVA 12096 - The SetStack Computer

題目連結

題意:幾個操作,push是在棧頂加入一個空集,dup是複製棧頂集合,在放入棧頂,union是把頭兩個取並集放回,int是頭兩個取交集放回,add是取頭兩個,把第一個當成一個集合加入第二個,每次操作輸出棧頂集合的裡面的個數

思路:用set,stack類比,然後利用map去hash一個集合,類比即可

代碼:

#include <cstdio>#include <cstring>#include <stack>#include <algorithm>#include <set>#include <map>using namespace std;int t, n, hn;char op[10];stack<set<int> > st;map<set<int>, int> hash;set<int> s1, s2;set<int>::iterator it;void print() {    printf("%d\n", (int)st.top().size());}void ad(set<int> s) {    if (hash.count(s))return;    hash[s] = hn++;}void pus() {    set<int> s;    ad(s);    st.push(s);    print();}void dup() {    set<int> s = st.top();    st.push(s);    print();}void uni() {    s1 = st.top(); st.pop();    s2 = st.top(); st.pop();    for (it = s1.begin(); it != s1.end(); it++)s2.insert(*it);    ad(s2);    st.push(s2);    print();}void ins() {    s1 = st.top(); st.pop();    s2 = st.top(); st.pop();    set<int> s3;    it = s1.begin();    set<int>::iterator it2 = s2.begin();    while (it != s1.end() && it2 != s2.end()) {if (*it < *it2) *it++;else if (*it > *it2) it2++;else {    s3.insert(*it);    it++;    it2++;}    }    ad(s3);    st.push(s3);    print();}void add() {    s1 = st.top(); st.pop();    s2 = st.top(); st.pop();    s2.insert(hash[s1]);    ad(s2);    st.push(s2);    print();}int main() {    scanf("%d", &t);    while (t--) {hn = 0;hash.clear();while (!st.empty()) st.pop();scanf("%d", &n);while (n--) {    scanf("%s", op);    if (op[0] == 'P')pus();    if (op[0] == 'D')dup();    if (op[0] == 'A')add();    if (op[0] == 'U')uni();    if (op[0] == 'I')ins();}printf("***\n");    }    return 0;}


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.