题解:P1059 [NOIP2006 普及组] 明明的随机数

· · 题解

题解:P1059 [NOIP2006 普及组] 明明的随机数

分析

这里我们使用桶排序。

对于每个 a_i,用数组记录他的值出现的次数。然后再枚举值域,对于 1 \sim 1000 中出现过的数,直接输出即可。这样既保证了按从小到大输出,又完成了去重。

代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n, a[105], cnt[1005]={0}, sum=0;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        cnt[a[i]]++;
    }
    for(int i=1;i<=1000;i++)
    {
        if(cnt[i]!=0)
        {
            sum++;
        }
    }
    cout<<sum<<endl;
    for(int i=1;i<=1000;i++)
    {
        if(cnt[i]!=0)
        {
            cout<<i<<" ";
        }
    }
    return 0;
}