题意:
给定n个数和一个m,现在你可以在任意位置插入任意数量的数,使得连续m个数的和都是一样的。如果不可以得到就输出-1 。可以得到输出长度和数组元素
解析:
如果n个数中不同的元素个数>m 则输出-1
否则我们就复制前m个数n次 (注意的是连续m个数不同元素的个数要等于m,如果不等于m我们还需要添加元素进去)
例如
4 3
2 2 3 4
这个样例正好不同元素个数正好等于m。所以直接复制n次即可。
例如
4 3
1 2 2 1
注意到连续m个数不同元素个数<m,所以我们需要添加元素进去。
长度n*k;
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10000;
int a[N];
int sum[N];
int b[N];
int t;
int n,k;
set<int> v;
vector<int>res;
map<int,int> mp;
int main()
{
cin>>t;
while(t--)
{
cin>>n>>k;
res.clear();
v.clear();
// mp.clear();
int mx=0;
for(int i=1;i<=n;i++)
{
cin>>a[i]; v.insert(a[i]);
}
if(v.size()>k)
{
cout<<-1<<endl;
continue;
}
for(int i=1;(int)v.size()<k;i++) v.insert(i);
for(int i=1;i<=n;i++)
{
for(auto j:v)
{
res.push_back(j);
}
}
cout<<n*k<<endl;
for(auto j : res) cout<<j<<" ";
cout<<endl;
}
}