数组补全
题目描述
有一个长度为 n 的数组(n 为奇数)a1,a2,…,an。
由于某些原因,数组丢失了一部分数,现在只剩下了前 k 个数 a1,a2,…,ak。
请你补全丢失的 n−k 个数,并使得补全后的数组能够满足以下性质:
数组中的元素的取值范围为 [1,p]。
数组中所有元素的和不大于 x。
数组中的中位数的值不小于 y。
如果补全方法不唯一,则任意合理方案均可。
代码(别人的代码像诗,我的像屎)
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn = 1010;
int main()
{
int nums[maxn];
int n, k, p, x, y;
int sum = 0;
int left = 0, right = 0;
cin >> n >> k >> p >> x >> y;
for(int i = 0; i < k; i++)
{
cin >> nums[i];
sum += nums[i];
if(nums[i] < y)
left++;
else
right++;
}
int r = max(n / 2 + 1, right);
int l = n - r;
if(left > l)
puts("-1");
else
{
int lsum = l - left;
int rsum = y * (r - right);
sum = sum + lsum + rsum;
if(sum > x)
puts("-1");
else
{
int len = l - left + r - right;
int i = 0;
for(; i < l - left; i++)
{
if(i != 0)
printf(" ");
printf("%d", 1);
}
for(; i < len; i++)
{
if(i != 0)
printf(" ");
printf("%d", y);
}
printf("\n");
}
}
return 0;
}