codeforces 540 B School Marks【贪心】

题意:一共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
");
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("
");
44         }
45     }
46     else printf("-1
");
47     return 0;
48 }
View Code

g0---oooooooooo

原文地址:https://www.cnblogs.com/wuyuewoniu/p/4480818.html