描述
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。格式
INPUT FORMAT:
输入有2行,第1行为1个正整数,表示所生成的随机数的个数:
N
第2行有N个用空格隔开的正整数,为所产生的随机数。
OUTPUT FORMAT:
输出也是2行,第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。
SAMPLE INPUT
10 20 40 32 67 40 20 89 300 400 15
SAMPLE OUTPUT
8 15 20 32 40 67 89 300 400
HINTS
题解:此题可以用任何一种排序方法然后去重,但是这样可能在大数据下会超时,且写起来有些麻烦。所以自然就考虑到了STL中的一个容器set(集合)。set可以帮助你自动排序且去重,省去了很多的工作量,写起来代码也很简洁。#include<bits/stdc++.h>
using namespace std;
template<typename T>inline void read(T &x){
int f=1;x=0;char c=getchar();
for(;!isdigit(c);c=getchar())if(c=='-')f=-1;
for(;isdigit(c);c=getchar())x=x*10+c-'0';
x*=f;
}
set<int>a;
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
int x;
cin>>x;
a.insert(x);
}
cout<<a.size()<<endl;
set<int>::iterator it=a.begin();
cout<<*it;
it++;
for(;it!=a.end();it++){
cout<<" "<<*it;
}
cout<<endl;
return 0;
}