CF 1348 B.Phoenix and Beauty
1348 B.Phoenix and Beauty
题意
给出一个长度为 \(n\) 的序列 \(A\) ,可以在其中填充任意数字 \(a\) ,要求对于任意长度为 \(k\) 的子数组,他们的和相同。
分析
\(\sum_1^k \ = \ \sum_2^{k+1}\) ,所以 \(A_1 \ = \ A_{k+1}\) 。
首先如果序列中数字种类大于 \(k\) ,那么一定不能构成,因为每个 \(k\) 长度数组都要填充 \(k\) 个不同数字,那么 \(A_{k+1} \ \ne A_1\) 。
否则,我们可以构造 \(n\) 组 \(k\) 长度的序列(每个元素都拓展成 \(k\) 长度的子数组),对于每组 \(A_1 \ 到 \ A_k\) 首先填充不同种类的数字,如果还有空位置,可以填入随意相同的数字。
Code
#include <bits/stdc++.h>
using namespace std;
void solve ()
{
int n, k; cin >> n >> k;
set<int> s;
for (int i = 0; i < n ; i ++ )
{
int x; cin >> x;
s.insert(x);
}
if (k < s.size()) cout << "-1" << endl;
else
{
cout << n * k << endl;
for (int i = 0; i < n; i ++ )
{
for (auto x : s) cout << x << ' ';
for (int i = 0; i < k - s.size(); i ++ ) cout << 1 << ' ';
}
cout << endl;
}
}
signed main ()
{
int T; cin >> T; while (T -- )
solve();
return 0;
}