zzuli 2865

出题人发现自己要记的密码越来越多,为了解决这个问题,他为每个密码设置了4位数的PIN,通过某种规则去生成对应的密码,这样就可以减轻记忆负担,可是他把有些PIN设置成重复的了,希望你可以帮他删除这些重复的PIN,只剩下不重复的PIN。注意删除后需要保持原来的顺序。如果他原来的PIN全部失效了,请你输出”oh my pins“(不含引号)

输入

一个整数T(代表样例数量,1<=T<=100)
每个样例包含两行,一行是一个整数,代表PIN的数量N(1<=N<=2000),第二行N个整数,代表PIN(四位数,可能包含前导0).

输出

如果还有PIN,包含两行,第一行输出还有多少PIN
第二行输出剩余这些PIN。如果PIN全部失效,请输出”oh my pins“(不含括号,占一行)

关键是找出如何存储这些pin码以及存储表示这些pin码出现的次数,我们这里可以将这些pin码看作是一个int整数,在输出的时候使用 %04d就可以了。

这里我开了两个数组去存储,cnt用来存出现的次数,它的下标是具体的pin码,再用一个p来存储每个pin码;最后用一个vector容器遍历整个cnt并存储cnt == 1的pi。

输出的时候注意,最后一个pin码背后是没有空格的。注意我的代码最后的输出行。

#include<iostream>
#include<algorithm>

using namespace std;

const int N = 10010;

vector<int> solve;
int cnt[N];
int p[N];

int main()
{
    int t;
    scanf("%d", &t);
    
    while(t --)
    {
        solve.clear();
        int n;
        cin >> n;
        
        for(int i = 0; i < N; i ++) cnt[i] = 0;
        
        for(int i = 0; i < n; i ++)
        {
            cin >> p[i];
            cnt[p[i]] ++;
        }
        
        for(int i = 0; i < n; i ++)
            if(cnt[p[i]] == 1) solve.push_back(p[i]);
            
        if(solve.size())
        {
            printf("%d\n%04d", solve.size(), solve[0]); // 解决输出问题
            for(int i = 1; i < solve.size(); i ++)
            printf(" %04d", solve[i]);
            cout << endl;
        }
        
        else puts("oh my pins");
    }
    
    return 0;
}

上一篇:ARCGIS制作三维地图教程(BIGEMAP)


下一篇:2021 BDCI 华为零售商品识别竞赛一等奖方案分享