5.18 Vj B - Phoenix and Beauty

#include<bits/stdc++.h>
#define ll long long
using namespace std;
//方法是通过在每个数的前后补上相应不重复的数,因此发现规律只要找出没出现过的数,和原有的数一起存入集合,再循环输出
//eg: 5 4
// 2  1    2     41
//12341234123412341234
int  main( )
{
    int t,n,k;
    cin>>t;
    for(int i=0; i<t; i++)
    {
        int n,k;
        cin>>n>>k;
        int a[n];
        set<int>aa;
        int b[105]= {0};
        for(int j=0; j<n; j++)
        {
            cin>>a[j];
            aa.insert(a[j]);//存放出现过的数
            b[a[j]]=1;//记录已出现过的数
        }
        if(aa.size()>k)//数的种类大于周期数,无法成立
        {
            cout<<-1<<endl;
        }
        else//如果数的种类小于周期数,少了几种数补几种数,补的数不能和a[j]中标记的数重复
        {
            int s=k-aa.size();//要补s个数
            for(int j=1,kk=0;kk<s;j++)
            {
                if(b[j]==0)//要补几个数就再增加标记几个数
                {
                    b[j]=1;
                    aa.insert(j);
                    kk++;
                }
            }
            cout<<n*k<<endl;
            for(int j=0;j<n;j++)//循环输出集合aa中的数即可
            {
                for(auto it=aa.begin();it!=aa.end();it++)
                {
                    cout<<*it<<" ";
                }
            }
            cout<<endl;
        }
    }
    return 0;
}
posted @ 2020-05-18 23:02  SyrupWRLD  阅读(142)  评论(0)    收藏  举报