有一个长度为 n n n 的数组( n n n 为奇数) a 1 , a 2 , … , a n a_1,a_2,…,a_n a1,a2,…,an。
由于某些原因,数组丢失了一部分数,现在只剩下了前 k k k 个数 a 1 , a 2 , … , a k a_1,a_2,…,a_k a1,a2,…,ak。
请你补全丢失的 n − k n−k n−k 个数,并使得补全后的数组能够满足以下性质:
如果补全方法不唯一,则任意合理方案均可。
输入格式
第一行包含
5
5
5 个整数
n
,
k
,
p
,
x
,
y
n,k,p,x,y
n,k,p,x,y。
第二行包含 k k k 个整数,表示数组中未丢失的数据 a 1 , a 2 , … , a k a_1,a_2,…,a_k a1,a2,…,ak。
输出格式
如果不存在合理方案,则输出 −1。
否则,输出一行 n − k n−k n−k 个数,表示你提供的补全方案,整数之间空格隔开。
数据范围
1
≤
n
≤
999
,
n
1≤n≤999,n
1≤n≤999,n 是奇数。
0
≤
k
<
n
,
0≤k
1
≤
p
≤
1000
,
1≤p≤1000,
1≤p≤1000,
n
≤
x
≤
n
p
,
n≤x≤np,
n≤x≤np,
1
≤
y
≤
p
1≤y≤p
1≤y≤p
输入样例1:
5 3 5 18 4
3 5 4
输出样例1:
4 1
输入样例2:
5 3 5 16 4
5 5 5
输出样例2:
-1
#include
using namespace std;
const int N = 1010;
int n,k,p,x,y;
int a[N];
int main(){
cin >> n >> k >> p >> x >> y;
for(int i = 0; i < k; i++) cin >> a[i];
int lt = 0, ge = 0, sum = 0;
for(int i = 0; i < k; i++){
if(a[i] < y) lt++;
else ge++;
sum += a[i];
}
if(lt > n / 2) puts("-1");
else{
int l = 0, r = 0;
r = max(n / 2 + 1, ge);
l = n - r;
sum += (l - lt) * 1 + (r - ge) * y;
if(sum > x) puts("-1");
else{
for(int i = 0; i < l - lt; i++)
cout << 1 << ' ';
for(int i = 0; i < r - ge; i++)
cout << y << ' ';
}
}
return 0;
}