Codeforces 540B - School Marks (贪心)

18 篇文章 0 订阅
9 篇文章 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");
        }
     }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值