HUST程序设计竞赛(新生赛)-同步赛-R-小乐乐与序列
小乐乐与序列
https://ac.nowcoder.com/acm/contest/1877/R
题目描述
老师给了小乐乐一个正整数序列,要求小乐乐把这个序列去重后按从小到大排序。但是老师给出的序列太长了,小乐乐没办法耐心的去重并排序,请你帮助他。
输入描述:
第一行包含一个正整数n,表示老师给出的序列有n个数。接下来有n行,每行一个正整数k,为序列中每一个元素的值。(1 ≤ n ≤ 105,1 ≤ k ≤ n)
输出描述:
输出一行,为去重排序后的序列,每个数后面有一个空格。
很明显是个桶排序,
桶排序是最简单的排序之一
同样的
耗得空间也是很大的
用一个布尔数组来记录
一开始全部为false
然后依次读入ai,,ai+1, ai+2... ...
然后将a[i],a[i+1],a[i+2]... ...标记为true
最后遍历一次
将所有的true输出
就达到了除重排序的作用
下面是C++の代码
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int read()
{
int x=0;
bool f = false;
char ch;
do ch=getchar(),f|=(ch=='-');
while(ch<48||ch>57);
while(ch>47&&ch<58)
x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
return f?-x:x;
}//快读
int main()
{
int i, n = read();
bool a[n+1];
memset(a, false, sizeof(a));
int temp;
for (i = 1;i <= n;i++)
{
temp = read();
a[temp] = true;
}
for (i = 1;i <= n;i++)
{
if (a[i] == true)
cout << i << " ";
}
return 0;
}