Problem - 1348B - Codeforces
解析:
满足题意,会构成循环序列,其中循环节长度为 k,统计数列中不同元素的个数 cnt ,如果cnt > k,显然无解。文章来源:https://www.toymoban.com/news/detail-714920.html
否则,由于题意中已经证明,答案序列个数小于等于 10000,并且 n和k的范围都为100,则n*k小于等于10000,所以我们直接把去重后的序列 a 重复 n 次即可。并且如果a不足k个,直接补 1即可。文章来源地址https://www.toymoban.com/news/detail-714920.html
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+5;
int t,n,k,a[N];
signed main(){
scanf("%lld",&t);
while(t--){
scanf("%lld%lld",&n,&k);
set<int>s;
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
s.insert(a[i]);
}
if(s.size()>k) puts("-1");
else{
vector<int>v;
for(auto it:s) v.push_back(it);
printf("%lld\n",n*k);
for(int i=1;i<=n;i++){
for(int j=0;j<v.size();j++) printf("%lld ",v[j]);
for(int j=1;j<=k-v.size();j++) printf("1 ");
}
printf("\n");
}
}
return 0;
}
到了这里,关于1400*B. Phoenix and Beauty(贪心&构造)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!