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,
540B :School Marks的更多相关文章
- CF#301 B:School Marks(贪心)
		
B:School Marks 有n个测试,已经完成了k个,每个测试得分为a[i],接下来的分数不知道,让我们求出任何一个满足题意的即可,满足题意就是n个测试的得分总和<=x, 中位数>=y ...
 - 第142天:Size Marks下载安装和使用方法
		
Size Marks下载安装使用方法 一.下载安装 1.下载Size marks:链接: https://pan.baidu.com/s/1breyMf1 密码: fjsn 2. 复制 Size Ma ...
 - CentOS 7上的程序管理:rpm、yum和源码编译安装
		
简介 在Linux的早期时代(也许吧?我猜的.也可能是Unix.),想要在系统上安装一款应用程序,是比较复杂的.需要专业的人员自行获取程序的源代码,并且编译安装,这是非常的复杂且需要一定的专业功底的, ...
 - Go语言学习:01-基本语法
		
目录 基本语法 源文件构成 数据类型 基本类型变量 数组 切片 创建切片 调整容量 字符串与切片 常量 String Map 控制 条件语句 if switch 循环语句 函数 函数定义 函数变量 闭 ...
 - Linux程序包管理之rpm
		
rpm简介 rpm( Red Hat Package Manager )是一个开放的软件包管理系统.它工作于Red Hat Linux及其他Linux系统,成为Linux中公认的软件包管理标准. rp ...
 - Linux程序包管理.md
		
rpm 简介 RPM包管理员(简称RPM,全称为The RPM Package Manager)是在Linux下广泛使用的软件包管理器.RPM此名词可能是指.rpm的文件格式的软件包,也可能是指其本身 ...
 - 从零开始学 Java - 利用 Nginx 负载均衡实现 Web 服务器更新不影响访问
		
还记得那些美妙的夜晚吗 你洗洗打算看一个小电影就睡了,这个时候突然想起来今天晚上是服务器更新的日子,你要在凌晨时分去把最新的代码更新到服务器,以保证明天大家一觉醒来打开网站,发现昨天的 Bug 都不见 ...
 - Vim光标定位
		
*定位到指定行n: 输入"nG". 或输入"ngg". 或输入":n" 这里,n就是指定的行的行号.注意,有时候G=gg. *跳到屏幕顶部: ...
 - Swift函数编程之Map、Filter、Reduce
		
在Swift语言中使用Map.Filter.Reduce对Array.Dictionary等集合类型(collection type)进行操作可能对一部分人来说还不是那么的习惯.对于没有接触过函数式编 ...
 
随机推荐
- 如何在Window上使用Git
			
开始的时候同事只给了一个地址,类似这样:git@111.111.1.1:ABCDEF (1)如何在Windows上使用Git 有一篇博客不错:http://www.tuicool.com/articl ...
 - 5 给我们的c#程序添加注释
			
注释是你的程序中的一个重要部分.在程序中添加注释是用来告诉你和其他人你的程序是做什么用的,你的思路是怎样的.注释可以用你熟悉的中文进行添加. 当你想暂时把你程序中的某些语句去掉的时候,不需要把他们删除 ...
 - PHP URL 重定向 的三种方法(转载)
			
为了方便查询,转载一篇. 1.使用header()函数 PHP的HTTP相关函数种提供了一个 header()函数,首先要清楚,header()函数必须放在php程序的开头部分,而且之前不能有另 ...
 - 结队开发项目——基于Android的无线点餐系统——NABC模型
			
特点:通过提前订餐,可以节约学生大量的排队时间. N(need):生活中可以发现许多同学都喜欢出去买饭,而且在有的摊位需要排很长时间的队,这样他们就会很晚吃到饭,下午有课的学生都不能睡午觉,所以通过我 ...
 - Careercup - Microsoft面试题 - 5718181884723200
			
2014-05-11 05:55 题目链接 原题: difference between thread and process. 题目:请描述进程和线程的区别. 解法:操作系统理论题.标准答案在恐龙书 ...
 - 【Anagrams】 cpp
			
题目: Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will ...
 - KMP算法原理
			
前几天在看数据结构与算法,里面提到过kmp算法,一个超级经典的字符串匹配算法.虽然网上有一大堆关于kmp算法的介绍文章,但是我看过之后还是“不明觉厉”.所以打算自己写写,大家一起学习吧. 一.关于KM ...
 - Java多线程时内存模型
			
1. 概述 多任务和高并发是衡量一台计算机处理器的能力重要指标之一.一般衡量一个服务器性能的高低好坏,使用每秒事务处理数(Transactions Per Second,TPS)这个指标比较能说明问题 ...
 - Leetcode#59 Spiral Matrix II
			
原题地址 相比于Spiral Matrix(参见这篇文章)要简单一些,因为是方阵,所以代码简洁一些. 注意当n是奇数的时候,中心小块要单独赋值(代码21行) 代码: vector<vector& ...
 - 【转载】在程序中动态改变static text控件的caption值
			
方法1,给STATIC控件取个名字叫IDC_STATICTITLE 然后在ClassWizard中设定一个控件变量给它叫m_statictitle 然后用m_statictitle.SetWindow ...