CodeForces 540B School Marks(思维)
2016-03-05 22:14
399 查看
B. School Marks
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
Little Vova studies programming in an elite school. Vova and his classmates are supposed to writen progress tests, for each test they will get a mark from 1 to p. Vova is very smart and he can write every test for any mark, but he doesn't want to stand out from the crowd too much. If the sum of his marks for all tests exceeds value x, then his classmates notice how smart he is and start distracting him asking to let them copy his homework. And if the median of his marks will be lower than y points (the definition of a median is given in the notes), then his mom will decide that he gets too many bad marks and forbid him to play computer games.
Vova has already wrote k tests and got marks a1, ..., ak. He doesn't want to get into the first or the second situation described above and now he needs to determine which marks he needs to get for the remaining tests. Help him do that.
Input
The first line contains 5 space-separated integers: n, k, p, x and y (1 ≤ n ≤ 999, n is odd,0 ≤ k < n, 1 ≤ p ≤ 1000, n ≤ x ≤ n·p, 1 ≤ y ≤ p). Here n is the number of tests that Vova is planned to write, k is the number of tests he has already written, p is the maximum possible mark for a test, x is the maximum total number of points so that the classmates don't yet disturb Vova, yis the minimum median point so that mom still lets him play computer games.
The second line contains k space-separated integers: a1, ..., ak (1 ≤ ai ≤ p) — the marks that Vova got for the tests he has already written.
Output
If Vova cannot achieve the desired result, print "-1".
Otherwise, print n - k space-separated integers — the marks that Vova should get for the remaining tests. If there are multiple possible solutions, print any of them.
Examples
input
output
input
output
Note
The median of sequence a1, ..., an where n is odd (in this problem n is always odd) is the element staying on (n + 1) / 2 position in the sorted list of ai.
In the first sample the sum of marks equals 3 + 5 + 4 + 4 + 1 = 17, what doesn't exceed 18, that means that Vova won't be disturbed by his classmates. And the median point of the sequence {1, 3, 4, 4, 5} equals to 4, that isn't less than 4, so his mom lets him play computer games.
Please note that you do not have to maximize the sum of marks or the median mark. Any of the answers: "4 2", "2 4", "5 1", "1 5", "4 1", "1 4" for the first test is correct.
In the second sample Vova got three '5' marks, so even if he gets two '1' marks, the sum of marks will be 17, that is more than the required value of 16. So, the answer to this test is "-1".
题解:小明是一个扮猪吃虎的家伙,每次考试他都能控制成绩,他想低调总成绩不高于x,成绩中位数又不能低于y,现在已经有k们成绩了,问接下来的几科成绩是多少,小明才会实现愿望;
我的思路,先求出他接下来最多考的成绩和md,现在要让大于等于y的数尽可能多;但是没课成绩又最小是1;
就尽可能往这个地方放y否则就放1;
代码:
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
Little Vova studies programming in an elite school. Vova and his classmates are supposed to writen progress tests, for each test they will get a mark from 1 to p. Vova is very smart and he can write every test for any mark, but he doesn't want to stand out from the crowd too much. If the sum of his marks for all tests exceeds value x, then his classmates notice how smart he is and start distracting him asking to let them copy his homework. And if the median of his marks will be lower than y points (the definition of a median is given in the notes), then his mom will decide that he gets too many bad marks and forbid him to play computer games.
Vova has already wrote k tests and got marks a1, ..., ak. He doesn't want to get into the first or the second situation described above and now he needs to determine which marks he needs to get for the remaining tests. Help him do that.
Input
The first line contains 5 space-separated integers: n, k, p, x and y (1 ≤ n ≤ 999, n is odd,0 ≤ k < n, 1 ≤ p ≤ 1000, n ≤ x ≤ n·p, 1 ≤ y ≤ p). Here n is the number of tests that Vova is planned to write, k is the number of tests he has already written, p is the maximum possible mark for a test, x is the maximum total number of points so that the classmates don't yet disturb Vova, yis the minimum median point so that mom still lets him play computer games.
The second line contains k space-separated integers: a1, ..., ak (1 ≤ ai ≤ p) — the marks that Vova got for the tests he has already written.
Output
If Vova cannot achieve the desired result, print "-1".
Otherwise, print n - k space-separated integers — the marks that Vova should get for the remaining tests. If there are multiple possible solutions, print any of them.
Examples
input
5 3 5 18 4 3 5 4
output
4 1
input
5 3 5 16 4 5 5 5
output
-1
Note
The median of sequence a1, ..., an where n is odd (in this problem n is always odd) is the element staying on (n + 1) / 2 position in the sorted list of ai.
In the first sample the sum of marks equals 3 + 5 + 4 + 4 + 1 = 17, what doesn't exceed 18, that means that Vova won't be disturbed by his classmates. And the median point of the sequence {1, 3, 4, 4, 5} equals to 4, that isn't less than 4, so his mom lets him play computer games.
Please note that you do not have to maximize the sum of marks or the median mark. Any of the answers: "4 2", "2 4", "5 1", "1 5", "4 1", "1 4" for the first test is correct.
In the second sample Vova got three '5' marks, so even if he gets two '1' marks, the sum of marks will be 17, that is more than the required value of 16. So, the answer to this test is "-1".
题解:小明是一个扮猪吃虎的家伙,每次考试他都能控制成绩,他想低调总成绩不高于x,成绩中位数又不能低于y,现在已经有k们成绩了,问接下来的几科成绩是多少,小明才会实现愿望;
我的思路,先求出他接下来最多考的成绩和md,现在要让大于等于y的数尽可能多;但是没课成绩又最小是1;
就尽可能往这个地方放y否则就放1;
代码:
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<map> #include<string> using namespace std; const int INF=0x3f3f3f3f; #define SI(x) scanf("%d",&x) #define PI(x) printf("%d",x) #define P_ printf(" ") #define mem(x,y) memset(x,y,sizeof(x)) const int MAXN=1010; int ans[MAXN],ans2[MAXN]; int main(){ int n,k,p,x,y; while(~scanf("%d%d%d%d%d",&n,&k,&p,&x,&y)){ int sum=0; for(int i=1;i<=k;i++)scanf("%d",&ans[i]),sum+=ans[i]; int md=(x-sum); for(int i=k+1;i<=n;i++){ if(md-(n-i)>=y)ans[i]=y,md-=y; else ans[i]=1,md-=1; ans2[i]=ans[i]; } sort(ans+1,ans+n+1); if(ans[n/2+1]<y||md<0)puts("-1"); else{ for(int i=k+1;i<=n;i++){ if(i==n)printf("%d\n",ans2 ); else printf("%d ",ans2[i]); } } } return 0; }
相关文章推荐
- 一个http请求的详细过程
- 简单的SpringMVC+Mybatis整合
- 处理器(Processor,Seoul 2008,LA 4254)
- 欢迎使用CSDN-markdown编辑器
- 构建Java开发高性能网站需要关注的事儿
- CodeForces - 540B School Marks (数学思维题 中位数)
- 双向链表的实现
- 网页中的load函数
- 代码赏析——史丰收速算
- 得于吾师傅的js知识 js类,单写模板,和私有保护的方法
- 每天学习一点,进步一点!
- android中Manifest讲解
- 回溯算法的常见例题之《迷宫》
- Activity之间的数据交互
- $@和 $*-linux_Shell
- Linux库文件和Shell可执行程序命令文件搜索路径变量的设置
- 二个android模拟器互发短信程序演示
- [BZOJ1968][AHOI2005]COMMON 约数研究(数论)
- LINUX之----启程(centos 6.5)
- php通过调用lucene库实现检索应用