题目:3664. 数组补全
题解:计算出小于y的数量lc,和大于或等于y的数量rc;
当lc的数量大于n/2时,不存在;当rc的数量大于n/2+1的时候,不需要再加右边大于或等于y的数。当添加小于y的数,我们加1,大于或等于y的数,我们加y,这样最后确保当sum>x时,一定无解
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int ,int> PII;
const int N=1e5+10;
const int mod=100000007;
const double PI=acos(-1);
int main(){
int n,k,p,x,y;
cin>>n>>k>>p>>x>>y;
int sum=0;
int t;
int lc=0,rc=0;
for(int i=0;i<k;i++){
cin>>t;
sum+=t;
if(t<y) lc++;
else rc++;
}
if(lc>n/2){
puts("-1");
}else{
if(rc>n/2+1){//易错点
lc=n-rc-lc;
rc=0;
sum+=lc*1;
}else{
lc=n/2-lc;
rc=n/2+1-rc;
sum+=lc*1+rc*y;
}
if(sum>x){
puts("-1");
}else{
for(int i=0;i<lc;i++){
cout<<"1 ";
}
for(int i=0;i<rc;i++){
cout<<y<<" ";
}
}
}
return 0;
}