zoukankan      html  css  js  c++  java
  • 【set】poj 3481 Double Queue

      首先呢,这是一道set裸题。

      其实介绍这道题最大的目的其实是为了熟悉set的用法。只要学会set的基础用法,这道题自然迎刃而解了啊。(超菜的啊


     set基础操作

    • 作为队列的一种,自然有插入q.insert(x) ->x是插入元素,q是队列名称。还有删除操作 q.erase(x);

                        --当然这题就会这些就够了啊。毕竟这是一道真·水题

    • begin() 返回指向第一个元素的迭代器
    • clear() 清除所有元素
    • count() 返回某个值元素的个数
    • empty() 如果集合为空,返回true(真)
    • end() 返回指向最后一个元素之后的迭代器,不是最后一个元素
    • find() 返回一个指向被查找到元素的迭代器
    • max_size() 返回集合能容纳的元素的最大限值
    • size() 集合中元素的数目
    • swap() 交换两个集合变量

     -->set这种队列,是一种自带排序的队列。所以在使用结构体作为插入元素时,一定要重载运算符。还有,set中是没有重复元素的。一定要注意啊。


    最后代码一波带走本题AC

    #include<iostream>
    #include<cmath>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    #include<set>
    using namespace std;
    struct ss{
        int k,p;
        bool operator < (const ss &a) const{
            if(p==a.p) return k<a.k;
            return p<a.p;
        }
    }a;
    set<ss>sl;
    int main()
    {
        //freopen("1.txt","r",stdin);
        int n;
        while(scanf("%d",&n)==1) {
            if(n==1) {
                scanf("%d%d",&a.k,&a.p);
                sl.insert(a);
            }
            if(n==3) {
                if(sl.empty()) printf("0
    ");
                else {
                    a=*(sl.begin());
                    printf("%d
    ",a.k);
                    sl.erase(a); 
                }
            }
            if(n==2) {
                if(sl.empty()) printf("0
    ");
                else {
                    a=*(--sl.end());
                    printf("%d
    ",a.k);
                    sl.erase(a);
                }
            }
            if(n==0) return 0;
        }
        return 0; 
    }

    双手奉上数据。

    Input

    2
    1 20 14
    1 30 3
    2
    1 10 99
    3
    2
    2
    0

    Output

    0
    20
    30
    10
    0

     本题结束。


    但是,set可不止这样-->  set还支持集合中的并集,交集,差集和补集    -->(划重点!

    1. 并集:
    2. std::set_union() 

      交集:

      std::set_intersection()
    3. 差集:
      std::set_difference()
    4. 补集(这是个玄学,反正我理解不了怎么实现的):
      std::set_symmetric_difference():这个是第一个迭代器于第二个的差集 然后再 并上第二个相对于第一个的差集 

    还有什么的话,想到再补充啦。(当然如果你是高端人士的话有基础,可以自行参考这篇博客:stl-set   我是从这里学的....QAQ)

    那么就这样啦。谢谢。

    ---OI是信仰,是真正应该被认真以待的东西.....!
  • 相关阅读:
    [Intellij] 软件设置和常用快捷键
    [Intellij] Project Structure 配置说明
    [日志log] 常用log日志记录方式对比和详解
    [J2EE]web.xml各个版本模板
    [技术选型] CDH-Cloudera Distribution Hadoop
    [技术选型] dubbo
    [技术选型] spring boot
    [hbase] HBase内置过滤器的一些总结
    [zookeeper] Zookeeper伪分布式集群配置
    [maven] settings 文件 本地maven仓库
  • 原文地址:https://www.cnblogs.com/qxyzili--24/p/10430551.html
Copyright © 2011-2022 走看看