题意:有一个n个元素的序列(n为奇数),现在给出其中的k个元素,让你构造其它的n-k个元素使得该序列的中位数>=y、序列总和<=x、最大元素<=p。输出任意一种可能即可。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[1000];
int main()
{
//ios::sync_with_stdio(false);开关同步
int n,i,p,x,k,y,ans;
while(~scanf("%d%d%d%d%d",&n,&k,&p,&x,&y))
{
int len=(n-1)/2,sum=0,big=0,thin=0,ans=0;
for(int i=0;i<k;i++)
{
scanf("%d",&a[ans]);
sum+=a[ans];
if(a[ans]>=y) big++;
else thin++;
ans++;
//printf("%d",ans);
}
ans--;
if(sum>x||thin>len)
{
printf("-1\n");
continue;
}
else
{
if(big>=len+1)
for(int i=0;i<n-k;i++)
{a[++ans]=1;sum+=1;}
else
{
for(int i=0;i<len-thin;i++)
{a[++ans]=1; sum+=1;}
for(int i=0;i<len-big+1;i++)
{a[++ans]=y;sum+=y;}
}
if(sum>x) printf("-1\n");
else
{
for(int i=k;i<n-1;i++)
printf("%d ",a[i]);
printf("%d\n",a[n-1]);
}
}
}
//cout << "Hello world!" << endl;
return 0;
}