C++STL中set的使用策略(二)

       下面来看一道PAT上的题——列车调度(L2—014)

       用set完美解决

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int i,j,k,n,x;
    set<int> s;//定义一个名为s的集合
    while(cin>>n)
    {
        for(int i = 0;i < n;i++)
        {
            cin>>x;
            if(s.empty())//判断集合s是否是空集
            {
                s.insert(x);//是的话向集合s插入一个元素x
            }
            else
            {
                set<int>::iterator it;//定义一个set型的迭代器
                it = s.lower_bound(x);//进行二分查找
                if(it == s.end())
                {
                    s.insert(x);//插入一个元素x
                }
                else
                {
                    s.erase(it);//删除指定元素it
                    s.insert(x);//插入一个元素x
                }
            }
        }
        int t = s.size();//集合s的大小
        cout<<t<<endl;
    }
    return 0;
}

       再看一道题——蒜头君的随机数

       蒜头君想在学校中请一些同学一起做一项问卷调查,为了确保实验的客观性,他先用计算机生成了 n(1≤n≤100)个 1 到 1000 之间的随机整数,对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。

       请你协助蒜头君完成“去重”与“排序”的工作。

       输入格式

       共两行,第一行为一个正整数 n。

       第二行有n个用空格隔开的正整数,为所产生的随机数。

       输出格式

       第一行输出一个正整数m,表示不相同的随机数的个数。第二行输出 m 个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

       样例输入

10
20 40 32 67 40 20 89 300 400 15

       样例输出

8
15 20 32 40 67 89 300 400

       这个就更简单了,直接给出代码,没什么好解释的,会用set就非常方便

#include <bits/stdc++.h>
using namespace std;
 
int main()
{
       set<int> q;
       int n,x;
       int sum = 0;;
       cin>>n;
       while(n--)
       {
              cin>>x;
              q.insert(x);
       }
       cout<<q.size()<<endl;
       set<int>::iterator it;
       for(it = q.begin();it != q.end();it++)
       {
              sum++;
              if(sum != q.size())
              {
                  cout<<*it<<" ";
           }
           else
           {
                  cout<<*it;
           }
       }
      
       return 0;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JavaEdge

jackson-databind最佳实践给出一个简单的POJOObjectMapper集合

2955
来自专栏潇涧技术专栏

Python Basics

1.使用glob模块可以用通配符的方式搜索某个目录下的特定文件,返回结果是一个list

832
来自专栏Java编程技术

并发队列中迭代器弱一致性原理探究

并发队列里面的Iterators是弱一致性的,next返回的是队列某一个时间点或者创建迭代器时候的状态的反映。当创建迭代器后,其他线程删除了该元素时候并不会抛出...

1351
来自专栏我是攻城师

理解Java集合框架里面的的transient关键字

3608
来自专栏JavaEdge

Java语法糖1 泛型与类型擦除

3617
来自专栏Java学习123

Java transient关键字使用小记

4082
来自专栏C/C++基础

临时变量作为非const的引用进行参数传递引发的编译错误

Linux环境运行,使用g++编译,观察如下代码,会出现: invalid initialization of non-const reference of t...

722
来自专栏fixzd

excel导入工具

实例化ExcelImport工具类之后,需要调用importExcel方法,方法定义如下

972
来自专栏申龙斌的程序人生

零基础学编程006:赋值语句

继续上次的一道练习题: 如何用Python打印这篇看上去很枯燥的《复利数据表》: (1+0.01) ^ 1 = 1.01 (1+0.01) ^ 2 = 1.0...

2705
来自专栏章鱼的慢慢技术路

牛客网_Go语言相关练习_判断&选择题(6)

反射最常见的使用场景是做对象的序列化(serialization,有时候也叫Marshal & Unmarshal)。

781

扫码关注云+社区