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\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 }
View Code

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

g0---oooooooooo

你可能感兴趣的:(codeforces)