欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

P1059 明明的随机数(set)

程序员文章站 2022-07-16 10:51:20
...

https://www.luogu.com.cn/problem/P1059

P1059 明明的随机数(set)

  • 对于C++来说,只有0是假!!!我竟然把负数作为判断条件!!!
  • 就是排序后进行去重、标记
#include<iostream>
using namespace std;
int a[105];
int n;
void mysort(int b[],int l,int r)
{
    for(int i = l;i < r;i++)
        for(int j = i+1;j <= r;j++)
        {
            if(b[i] > b[j])
            {
                int tem = b[i];
                b[i] = b[j];
                b[j] = tem;
            }
        }
}

int main()
{
    freopen("1.txt","r",stdin);
    freopen("2.txt","w",stdout);
    cin >> n;int n_ = n;
    for(int i = 1;i <= n;i++)
        cin >> a[i];
    mysort(a,1,n);
    for(int i = 1;i < n;i++)
    {
        if(a[i] == a[i+1])
            {
                n_--;
                a[i] = -1;
            }
    }
    cout << n_ << endl;
    for(int i = 1;i <= n;i++)
        if(a[i] >= 0)
            cout << a[i] << " ";
}

大佬

C++ set

set就是是数学上的集合——每个元素最多只出现一次,并且set中的元素已经从小到大排好序。

头文件:#include < set > //用bits的童鞋请忽略
常用操作 :
begin()    返回set容器的第一个元素的 地址
end()      返回set容器的最后一个元素 地址
clear()    删除set容器中的所有的元素
empty()     判断set容器是否为空
max_size()   返回set容器可能包含的元素最大个数
size()      返回当前set容器中的元素个数
erase(it) 删除迭代器指针it处元素
insert(a) 插入某个元素

set<int>s;
s.begin()和s.end()都是指针,需要使用*来取得所指地址存放的值

更多用法

set自动去重并排序

#include<iostream>
#include<set>

using namespace std;
int a[105];
int n;


int main()
{
    set<int>s;
    
    cin >> n;
    for(int i = 1;i <= n;i++)
        {
            cin >> a[i];
            s.insert(a[i]);
        }
    
    
    cout << s.size() << endl;
    while(!s.empty())
    {
        cout << *s.begin() <<" ";
        s.erase(s.begin());
    }
}

注意s定义在main中,定义在全局变量过不了洛谷OJ很奇怪

相关标签: # 洛谷