1. 程式人生 > >UVA 12096(幾種容器的使用)

UVA 12096(幾種容器的使用)

題目

題意:有幾種操作(如下圖),然後給定一些操作,問最後棧頂的集合中有幾個元素

AC程式碼:

#include<iostream>
#include<cstdio>
#include<string>
#include<set>
#include<stack>
#include<map>
#include<vector>
#include<algorithm>

#define ALL(x) x.begin(),x.end()
#define INS(x) inserter(x,x.begin())   //插入迭代器

using namespace std;

typedef set<int> Set;
map<Set,int> IDcache;  //把集合對映成ID
vector<Set> Setcache;   //根據ID取集合
stack<int>s;

int ID(Set x)  //查詢給定集合x的ID。如果沒找到,分配一個新的ID
{
    if(IDcache.count(x))
        return IDcache[x];
    Setcache.push_back(x);   //新增新集合
    return IDcache[x]=Setcache.size()-1;
}

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int N;
        scanf("%d",&N);
        for(int i=0;i<N;i++)
        {
            string op;
            cin>>op;
            if(op[0]=='P')
                s.push(ID(Set()));
            else if(op[0]=='D')
                s.push(s.top());
            else
            {
                Set x1=Setcache[s.top()];
                s.pop();
                Set x2=Setcache[s.top()];
                s.pop();
                Set x;
                if(op[0]=='U')
                    set_union(ALL(x1),ALL(x2),INS(x));
                else if(op[0]=='I')
                    set_intersection(ALL(x1),ALL(x2),INS(x));
                else
                {
                    x=x2;
                    x.insert(ID(x1));
                }
                s.push(ID(x));
            }
            cout<<Setcache[s.top()].size()<<endl;
        }
        cout<<"***"<<endl;
    }

    return 0;
}

相關推薦

UVA 12096(容器的使用)

題目題意:有幾種操作(如下圖),然後給定一些操作,問最後棧頂的集合中有幾個元素AC程式碼:#include<iostream> #include<cstdio> #include<string> #include<set> #i

總結:c++容器的用法及棧和佇列(適合自學c++的同學)

1.string型別用法 還可以比較大小如a>b,如果a的字典序大於b的返回1,否則返回0 getline(cin,s);讀取一行string型別 string s2(s1)將s2初始化為s1的副本 或m="123";m+="456";cout<<

STL中有哪容器

 C++ 之高效使用STL (STL 容器的選擇) : 你知道C++中有很多你可以支配的容器,但是你意識到有多少嗎?要確定你沒有忽略你的選項,這裡有一個快速回顧。 •標準STL序列容器:vector、string、deque和list。 •標準STL關聯容器:set、mult

STL 容器的比較優缺點

1、set和map比較\setmap共同點都是無序的儲存元素,只是通過它提供的藉口對裡面的元素進行訪問,底層都是採用紅黑樹實現不同點集合,用來判斷某一個元素是不是在一個組裡面,使用的比較少對映,相當於字

深入研究Spring-IoC :容器建立的方式

1.前言 本文為對tiny-spring的學習解讀,程式碼參考自tiny-spring。一個手寫的Spring簡易版框架。 前面已經提到了Spring IOC容器的建立大致分為3個步驟。但是這個三個步驟是有一個演進的過程的,Spring容器建立方式前後有6種,從最基本的例項化建立

你必須知道的java容器(集合類)

一、基本概念 Java容器類類庫的用途是“持有物件”,並將其劃分為兩個不同的概念: 1)Collection:一個獨立元素的序列,這些元素都服從一條或者多條規則。 List必須按照插入的順序儲存元素,而set不能有重複的元素。Q

Docker進入容器方法

進入容器的幾種方法:     1、exec         通過docker ps 檢視需要進入的容器pid         執行  &nb

SpringIOC容器初始化之後,和銷燬之前方法的執行順序

1.搭建一個簡單的Spring環境 2.定義一個介面及其實現類 package com.roger.service; public interface SpringLifeCycleService { void springLifeCycle(); } package co

C++STL常用容器簡要歸納

本文參考李煜東《演算法競賽進階指南》,筆者作歸納總結。 本文將簡要介紹STL中vector,queue,priority_queue,deque,set,multiset,map,bitset八種容器及其操作方法。 vector 使用此容器需在程式前加上標頭檔

Docker容器跨主機通訊的方式

前言:Docker的5種網路模式 Bridge 此時docker引擎會建立一個veth對,一端連線到容器例項並命名為eth0,另一端連線到指定的網橋中(比如docker0),因此同在一個主機的容器例項由於連線在同一個網橋中,它們能夠互相通訊。容器建立時還會自

spring給容器中註冊元件的方式,1.包掃描+元件標註註解[email protected](

              給容器中註冊元件;        1)、包掃描+元件標註註解(@Controller/@Service/@Repository/@Component)[

Tomcat容器管理安全的驗證方式

https://my.oschina.net/itblog/blog/678845?fromerr=mnnjJA0O 摘要: 本文介紹如何使用容器(這裡指tomcat)來進行安全管理。 當訪問伺服器中受保護的資源時,容器管理的驗證方法可以控制確認使用者身份的方式。T

Spring容器建立物件的方式及其區別

1. 通過類路徑下的配置檔案獲取ApplicationContext    //在建立容器的時候建立物件          特點:佔用記憶體,但效率高 ApplicationContext ac=new ClassPathXmlApplicationContext("cl

Spring容器中定義Bean初始化方法和銷燬方法

Spring 容器中的 Bean 是有生命週期的,Spring 允許 Bean 在初始化完成後以及銷燬前執行特定的操作。下面是常用的三種指定特定操作的方法: 通過實現InitializingBean/DisposableBean 介面來定製初始化之後/銷燬之前

使用STL vector的清空容器(刪除)辦法

轉載自:http://blog.csdn.net/metalkittie/article/details/3115750 vector <int> vecInt; for (int i=0;i<500;i++) { vecInt.push_bac

Spring容器中的Bean初始化方法和銷燬方法的先後順序

Spring 容器中的 Bean 是有生命週期的,spring 允許 Bean 在初始化完成後以及銷燬前執行特定的操作。下面是常用的三種指定特定操作的方法: 通過實現InitializingBean/DisposableBean 介面來定製初始化之後/銷燬之前的操作方法;

Spring-- Ioc 容器Bean例項化的場景

Bean例項化的幾種場景 1、BeanDefinitionRegistryPostProcessor例項化:標準BeanFactoryPostProcessor的擴充套件,BeanFactoryPostProcessor的作用是用來進一步定義註冊的BeanDefiniti

STL中常用容器比較

list支援快速的插入和刪除,但是查詢費時; vector支援快速的查詢,但是插入費時。 map查詢的時間複雜度是對數的,這幾乎是最快的,hash也是對數的。  如果我自己寫,我也會用二叉檢索樹,它在大部分情況下可以保證對數複雜度,最壞情況是常數複雜度,而std::m

SpringIOC容器建立物件及依賴注入的方式

Spring IOC容器SpringIOC容器:是spring的核心內容作用:建立物件,處理物件的依賴關係IOC容器建立物件幾種方式:1、呼叫無參構造<bean id="user" class="edu.cloud.spring.entity.User"><

常見web 容器比較 (tomcat、 jboss 、resin、 weblogic、 websphere、 glassfish)

tomcat,Jboss,weblogic容器的作用 Apache:全球應用最廣泛的http伺服器,免費,出自apache基金組織   Tomcat:應用也算非常廣泛的web伺服器,支援部分j2ee,免費,出自apache基金組織   JBoss:開源的應用伺服器,比較受人喜愛,免費(文件要收費)