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)进行操作可能对一部分人来说还不是那么的习惯.对于没有接触过函数式编 ...
随机推荐
- AutoCAD/Civil 3D 学习笔记
Civil学习笔记 1.环境配置 1.添加引用: Civil二次开发需要5个基本的AutoCAD的dll引用-acdbmgd.dll, acmgd.dll, accoremgd.dll, AecBas ...
- (转)eclipse安装ADT插件重启后不显示Android SDK Manager和Android Virtual Device Manager图标的一种解决办法
文章来源:http://blog.csdn.net/zcyhappy1314/article/details/8307534 下面说的这种情况是在正确安装ADT插件的前提下,重启eclipse后,工具 ...
- 21.altera fpga 芯片中 pin 和 pad 区别
在chip planner 中 ,看管脚时,会看到 pin 和pad 同时出现, 如 pin120/pad174 Bank 4 那么有什么区别? PIN指芯片封装好后的管脚,即用户看到的管脚: PAD ...
- PB数据类型转换表
数据类型转换表 MICROSOFT PB(16Bit) PB(32Bit) Bool Boolean ...
- PB中获取datawindow提交的sql语句
PB的群里边,有人问的到这个问题,查了一下,综合了两条回答,得到了答案 1.DW 控件的SQLpreview 事件里的sqlsyntax 参数即是 2.pb一般使用占位符优化SQL语句,也就是你看到的 ...
- [shell基础]——split命令
测试文本 # cat name1.txt name1 alvin1 name2 alvin2 name3 alvin3 name4 alvin4 此时目录下就只有这个文件 # ls name1.txt ...
- Objective-C面向对象(四)
1.协议(protocol)和委托 1.1 规范.协议与接口 OC中协议的作用就相当于其他语言中接口的作用.协议定义的是多个类共同的公共行为规范,协议通常定义一组公用方法,但不提供实现. 1.2 定义 ...
- .net 常用正则表达式
Net中正则表达式的简单使用方法及常见验证判断 判断字符串是只是数字我们可以这样写:return new System.Text.RegularExpressions.Regex(@"^([ ...
- OpenCms 集成外部Solr Server
OpenCms默认是以内嵌的Solr作为全文搜索服务的,不过我们也可以配置一个独立的Solr搜索服务器 设置外部Solr Server 1. 从Solr 官方站点http://lucene.apach ...
- 17、android设备如何防止屏幕休眠(转载)
当你需要你的设备需要长期运行时,由于移动设备为了延长电池续航时间,在运行15s-30mins后(用户可自由设置),如果用户在此时间段内没有操作,系统将进入休眠状态并 将屏幕锁上,所以在需要长期运行时, ...