题目描述
blablabla
样例
blablabla
算法1
(greedy)
根据题意要对于可能的序列要输出循环子序列,因为可以随意插入,那么只要
在循环子序列里有的元素都能成为一个循环的序列,那么我们只要考虑不重复
的元素即可(用set取重),那么什么情况不可能呢,很明显当循环的子序列大
小大于k时,即为不可能。对于不够k个的序列,补上相应个数的1(可以是其他
数字)即可。
时间复杂度
C++ 代码
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <map>
#include <unordered_map>
#include <cmath>
#include <cstdio>
#include <vector>
#include <set>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int INF = 1e9;
typedef pair<int,int> pii;
int t, n, k;
set<int> s;
int main()
{
cin >> t;
while(t--){
cin >> n >> k;
s.clear();
for (int i = 0; i < n; i++) {
int a;
cin >> a;
s.insert(a);
}
if(s.size()>k){
cout << -1 << endl;
continue;
}
cout << n * k << endl;
for (int i = 0; i < n;i++){
for(auto b:s){
cout << b << " ";
}
for (int j = s.size(); j < k;j++){
cout << 1 << " ";
}
}
cout << endl;
}
}