题意:一共n个数,给出其中k个数,要求这n个数的中位数为y,这n个数的和不超过x,补全剩下的n-k个数
先统计给出的k个数里面比中位数小的数,
如果cnt<=n/2,说明中位数还没有出现,把这n/2-cnt个数都补上1,剩下的都补上y
如果cnt>n/2,说明中位数不存在
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include <cmath> 5 #include<stack> 6 #include<vector> 7 #include<map> 8 #include<set> 9 #include<queue> 10 #include<algorithm> 11 using namespace std; 12 13 #define foreach(i,c) for (__typeof(c.begin()) i = c.begin(); i != c.end(); ++i) 14 15 typedef long long LL; 16 const int INF = (1<<30)-1; 17 const int mod=1000000007; 18 const int maxn=100005; 19 20 int a[maxn]; 21 22 int main(){ 23 int n,k,p,x,y; 24 cin>>n>>k>>p>>x>>y; 25 int ans=0; 26 int sum=0; 27 for(int i=1;i<=k;i++){ 28 cin>>a[i]; 29 sum+=a[i]; 30 if(a[i]<y) ans++; 31 } 32 int l,r; 33 34 if(ans<=n/2){ 35 l=min(n/2-ans,n-k); 36 r=n-l-k; 37 sum+=l+r*y; 38 39 if(sum>x) printf("-1\n"); 40 else{ 41 for(int i=1;i<=l;i++) printf("1 "); 42 for(int i=1;i<=r;i++) printf("%d ",y); 43 printf("\n"); 44 } 45 } 46 else printf("-1\n"); 47 return 0; 48 }
g0---oooooooooo
时间: 2024-10-21 15:41:20