540B :School Marks

题目链接

题意:

输入:

第一个: n k p x y

第二行:k个数

n: 数的数量

k:n个数中已经知道的k个数

p:n个数取值的上界,下界是1

x:n个数的和的上界x

y:n个数的中位数至少是 y

输出:

补充其余的n-k个数,使得这个n个数的和不大于x,中位数不小于y

解题思想:

对已经知道的k个数,判断其中大于等于y的数median有几个,

若median<=n/2 说明已知道的k个数中大于y的不到一半,则在未知道的n-k个数中,补充y,当median>n/2 时候停止

若还没有补充完n-k个数,则补充1,

根据上面得到的是满足中位数大于等于y的最小序列

下面判断这个n个数的和是否大于x

这样就ok了

Java程序:

import java.util.Scanner;

public class B540 {
    static void run0(){
         Scanner sc= new Scanner(System.in);
         int n = sc.nextInt();// n 个数
         int k = sc.nextInt();// 已经知道的 k个数
         int p = sc.nextInt();// n 个数可取的最大值p,最小值是 1
         int x = sc.nextInt(); // n 个数的和的上界
         int y = sc.nextInt(); // n 个数的中位数至少为 y
         int[] a = new int[n]; // 存放n 个数
         int median = 0;// = n/2 时候是中位数
         int i=0;
         int sum = 0; // n个数的和
         for(i=0;i<k;i++){
             a[i] = sc.nextInt();
             if(a[i]>= y) // 大于y 的个数
                 median++;
         }
         // 若median <=n/2 说明输入的数中> y 的数还不够
         while(i<n && median<= n/2){
             a[i++] = y;
             median++;
         }
         // 其他值至少是 1
         for(;i<n;i++){
             a[i] = 1;
         }
         // 上面的值是满足中位数至少是y的 一个条件
         // 下面考虑n个数的和要小于 x
         for(int j=0;j<n;j++)
             sum += a[j];
         if(sum>x || median<= n/2){
             System.out.println(-1);
             return;
         }

            for(int j=k;j<n;j++)
                System.out.print(a[j]+" ");
    }
    public static void main(String[] args){
        run0();

    }
}

Python程序:

n,k,p,x,y = map(int,raw_input().split())

a = map(int,raw_input().split())
median = 0
s = 0
for i in a:
    s+=i
    if i>=y:
        median +=1
b = []
while median<= n/2:
    b.append(y)
    median = median +1
while len(b)+k < n :
    b.append(1)
if len(b)+k>n or sum(b)+s >x:
    print -1
else:
    for i in b:
        print i,
时间: 2024-10-21 10:32:59

540B :School Marks的相关文章

rpm程序包管理器详解

1. 程序包管理器的功能 我们知道,由程序员编写并提供的程序源代码要转换成目标二进制格式才能在计算机上运行起来,但用户要在平台上使用时需要手动编译安装后才能使用,对于普通用户来说有一定难度.因此为了降低普通用户对应用程序的使用难度,程序员可在提供源代码的同时提供已在特定环境下编译好的程序文件,只要用户的平台环境和程序员的平台环境相同,就可以通过解压程序员提供的二进制格式文件即可使用,而无需自己手动编译安装. 一个已编译好的程序由二进制程序.库文件.配置文件和帮助手册等组成,而程序包管理器的功能就

Linux软件安装之RPM

linux程序包管理的实现,rpm包管理器 rpm命令实现程序管理: 安装:i,--install 升级:-U,update,-F,--freshen 卸载:-e,--erase 查询:-q,--query 校验:-V,--verify 数据库维护:--builddb,--initdb 安装,升级是要用 Package_File (zsh-4.3.11-4.el6.centos.2.x86_64.rpm ) 卸载,查询是要用 Package_name  (zsh) 安装: rpm {-i|--i

linux程序包管理 rpm yum 编译

rpm命令:rpm  [OPTIONS]  [PACKAGE_FILE] 安装:-i, --install 升级:-U, --update, -F, --freshen 卸载:-e, --erase 查询:-q, --query 校验:-V, --verify 数据库维护:--builddb, --initdb 安装:rpm {-i|--install} [install-options] PACKAGE_FILE ... rpm  -ivh  PACKAGE_FILE ... GENERAL

Linux中程序包管理

u    无论我们使用哪种操作系统,仅使用操作系统自带的程序包一般都满足不了我们的使用需求,所以我们都需要安装程序.这篇博文我们来讲解一下在Linux操作系统中我们该如何安装程序. 本篇文章会涉及rpm管理程序包.yum管理程序包.yum仓库的指定.自己编译源码安装程序.简要介绍一下该如何自己建立一个yum仓库给其他主机提供程序包. 一.rpm管理程序包 (1)如何获取安装包 1)系统发行版的光盘或者官方的文件服务器(或者镜像站点): http://mirrors.aliyun.com/ htt

Vim光标定位

*定位到指定行n: 输入"nG". 或输入"ngg". 或输入":n" 这里,n就是指定的行的行号.注意,有时候G=gg. *跳到屏幕顶部: 输入“H”. 这里,停在第一个非空字符上.加一个数字N,是指距窗口顶部的行数(如'NH'正数第N行) *跳到屏幕底部: 输入“L”. 这里,停在第一个非空字符上.加一个数字,是指距窗口底部的行数(如'NL'倒数第N行) *跳到屏幕中间: 输入“M”. 这里,停在第一个非空字符上. *跳到文件首: 输入&qu

C# 基础知识复习(四)---数组

声明数组 在 C# 中声明一个数组,您可以使用下面的语法: datatype[] arrayName; 其中, datatype 用于指定被存储在数组中的元素的类型. [ ] 指定数组的秩(维度).秩指定数组的大小. arrayName 指定数组的名称. 例如: double[] balance; 初始化数组 声明一个数组不会在内存中初始化数组.当初始化数组变量时,您可以赋值给数组. 数组是一个引用类型,所以您需要使用 new 关键字来创建数组的实例. 例如: double[] balance

C++获取数组长度

1.获取字符数组长度 char a[]="abcdef"; int length1=sizeof(a)/sizeof(a[0]); cout<<"a"<<length1<<endl; length1为7. cout<<"a"<<strlen(a)<<endl; 输出6 注:string不能用strlen函数 2.获取字符串string长度 #include <strin

Linux程序包管理.md

rpm 简介 RPM包管理员(简称RPM,全称为The RPM Package Manager)是在Linux下广泛使用的软件包管理器.RPM此名词可能是指.rpm的文件格式的软件包,也可能是指其本身的软件包管理器(RPM Package Manager).最早由Red Hat研制,现在也由开源社区开发.RPM通常随附于Linux发行版,但也有单独将RPM作为应用软件发行的发行版(例如Gentoo).RPM仅适用于安装用RPM来打包的软件,目前是GNU/Linux下软件包资源最丰富的软件包类型之

RAM和yum功能全解

一RPM程序包管理器功能全解 1.RPM简介 RPM全称为"RedHat Package Manager",是有RedHat公司开发的程序包管理器.RPM 是以一种数据库记录的方式将所需要的套件安装到Linux主机的一套程序包管理器. RPM的命名格式: Name-version-release.arch.rpm 套件名称  套件的版本 发行号 适合的硬件平台 扩展名 RPM的组成清单: 1文件清单 2安装或卸载时运行的脚本 3数据库(公共) 4程序包的名称和版本 5依赖关系 6功能说