码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces 540B - School Marks (贪心)

时间:2015-05-20 13:14:07      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:

第一次在CF上水题,  果断wa了好几发,   纪念一下,一发水题。

题意:有N门成绩,   已经告知你K门, 在保证N门总和小于X且中位数大于Y的情况,  让你求出剩下N-K门,

题解:

明显 要保证和越小越好,  插入的数字只有1和Y,在插的时候保证中位数合法。记录小于Y的值,然后用1和Y去补缺失的。简单题, 有一点小细节,wa了好几发

代码:

#include<stdio.h>
#include<string.h>
int minn(int a, int b)
{
   if(a < b)  return a;
   return b;    
}
int main()
{
     int n, k, p, x, y, sum, big, sm, a;
     while(scanf("%d", &n) != EOF)
     {
        sum = sm = 0;
        scanf("%d%d%d%d", &k, &p, &x, &y);
        for(int i = 0; i < k; i++)
        {
          scanf("%d", &a);
          sum += a;     
          if(a < y)  sm++;    
        }           
         
        if(sm > n/2)  {printf("-1\n");  continue;}    
        sm = minn(n/2-sm, n-k), big = (n-k-sm);
        sum += sm;
        sum += (big * y);  
        if(sum > x)  {printf("-1\n"); continue;}
        else  
        {
          int flag = 1;
          for(int i = 1; i <= big; i++)
          {
             if(flag)  printf("%d", y);
             else  printf(" %d",y); 
             flag = 0;      
          }      
          for(int i = 1; i <= sm; i++)
          {
             if(flag)  printf("1");
             else  printf(" 1"); 
             flag = 0;      
          }
          printf("\n");
        }
     }

Codeforces 540B - School Marks (贪心)

标签:

原文地址:http://blog.csdn.net/q651111937/article/details/45869221

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!