首页 > 其他 > 详细

5.18 Vj B - Phoenix and Beauty

时间:2020-05-18 23:25:46      阅读:67      评论:0      收藏:0      [点我收藏+]
#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;
}

5.18 Vj B - Phoenix and Beauty

原文:https://www.cnblogs.com/SyrupWRLD999/p/12913648.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!