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;
}
posted @ 2021-09-14 10:42  Horb7  阅读(34)  评论(0编辑  收藏  举报