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

· · 题解

做题思路

这题又让我们排序,又让我们去重,考虑到数字大小不超过一千,我们可以开个桶数组 cntcnt_i 表示数字 i 在序列中出现的个数,然后遍历桶,如果发现 cnt_i>0,记录答案。

code:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,count[1005]={0},tf[1005]={0},tmp,sum=0;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>tmp;
        if(tf[tmp]==0){
            count[tmp]++;
            tf[tmp]=1;
        }    
    }
    for(int i=0;i<1005;i++)if(tf[i]>0)sum++;
    printf("%d\n",sum);
    for(int i=0;i<1005;i++)if(count[i]>0)printf("%d ",i);
    return 0;
}