P1059 明明的随机数(set)
程序员文章站
2022-07-16 10:51:20
...
https://www.luogu.com.cn/problem/P1059
- 对于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很奇怪
上一篇: 洛谷P1181 Java