zoukankan      html  css  js  c++  java
  • CodeForces #301 B. School Marks

    题目链接:http://codeforces.com/contest/540/problem/B

    大致题意:给定一个数组有n个数,有k个数是已知的,p是数组内元素大小上限,x是数组元素和的上限,x是整个数组中位数的大小下限。

    输入:第一行nkpx and y

            第二行 k个元素。

    求不知道 的那 n - k 个元素

    例如:

    input :5 3 5 18 4
               3 5 4 
    output:4 1 
    思路:我们可以这样想,我们把整个数组中位数以后的小于y的数都替换成y,把中位数以前的还未知的数都替换成1, 当然,本来就已知的k个数不能变。我们可以进行如下处理:
    代码:
     1 #include <cstdio>
     2 #include <algorithm>
     3 #include <iostream>
     4 using namespace std;
     5 
     6 int a[1005],b[1000];
     7 int n,k,p,x,y;
     8 int main()
     9 {
    10     scanf ("%d %d %d %d %d",&n,&k,&p,&x,&y);
    11     int i,j,len=0,flag=0;
    12     for(i=0;i<k;i++)
    13         scanf ("%d",&a[i]);
    14     sort(a,a+n);//我们首先对这个数组排序。那么未知的位置为0 。我们可以知道n/2 以后的位置有多少小于中位数。
    15     for(i=n-1,j=0;i>=n/2;i--)
    16     {
    17         if(a[i]<y)//从后往前遍历,遇到0,则直接把这个y放入这个位置。b[]数组是记录放入了多少的数
    18         {
    19             if(a[i]!=0)//遇到不是0但是该位置的数小于y的情况,把该数依次放入开头的位置。。a[0],a[1]...
    20             {
    21                 if(a[j]==0)
    22                 {
    23                     a[j++]=a[i];//把该数放到开头,并把y放入此位置
    24                     a[i]=y;
    25                     b[len++]=y;//记录放入的元素
    26                 }
    27             }else  //这是遇到0的情况,直接把y放入该位置
    28             {
    29                 a[i]=y;
    30                 b[len++]=y;
    31             }
    32         }
    33     }
    34     for(i=0;i<n/2;i++)//从0~n/2,依次把还是0的位置上的数替换成1
    35         if(a[i]==0)
    36         {
    37             b[len++]=1;
    38             a[i]+=1;
    39         }
    40     int sum=0;
    41     for(i=0;i<n;i++)//计算数组和
    42         sum+=a[i];
    43     if(sum>x||a[n/2]<y)//判断不成立的情况,sum>x和中位数<y
    44         printf("-1
    ");
    45     else
    46     {
    47         for(i=0;i<len;i++)
    48             if(i==len-1)
    49                 printf("%d",b[i]);
    50             else
    51                 printf("%d ",b[i]);
    52     }
    53     return 0;
    54 }
    加油啊!!!
  • 相关阅读:
    react native 学习资料整理
    yii cookie ,session 操作
    react native 的js 文件从哪里获取
    react native与现有的应用程序集成
    ubuntu 12.04 react-native 安装
    html ul li的学习
    CAGradientLayer的一些属性解析
    ubuntu 安装 swoole 和mac 安装swoole 扩展
    iOS React-Native入门指南之HelloWorld
    实现微信浏览器内打开App Store链接(已被和谐,失效了)
  • 原文地址:https://www.cnblogs.com/bei-insomia/p/4476410.html
Copyright © 2011-2022 走看看