题意:给出一个n个数的序列a,如何可以插入几个数使其长度为k的子序列和相同,n=4,k=2,a = 1 2 2 1,一个答案是1 2 1 2 1,和都为3
假设前k个已经定好,那么易得a[k+1]==a[1],a[k+2]==a[2],这是一个循环,什么时候没有答案,n个数不同数的个数大于循环长度k。如n=3,k=2,a=1,2,3循环里只有2个数不能遍历a
如果有答案,那么随便找k个数构成循环节,只要保证a中每个数都在这k个数里面出现过就行
#include
#include
using namespace std;
int n,k,a[101],v[101],ans[10010],ta;
int main() {
int t;
cin >> t;
while(t--) {
cin >> n >> k;
memset(v,0,sizeof v);
for (int i = 1; i <= n; i++) {
cin >> a[i];
v[a[i]] = 1;
}
int q[200],tp = 0;
for (int i = 0; i <= 100; i++)
if (v[i]) {
q[++tp] = i;
}
if (tp > k)
cout << "-1\n";
else {
while (tp < k) {
q[++tp] = q[1];
}
int t = 1;
ta = 0;
while (t <= n) {
for (int i = 1; i <= tp; i++) {
if (q[i] == a[t]) t++;
ans[++ta] = q[i];
}
}
cout << ta << "\n";
for (int i = 1; i <= ta; i++)
cout << ans[i] << " ";
puts("");
}
}
return 0;
}