B - School Marks

Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u

Description

Little Vova studies programming in an elite school. Vova and his classmates are supposed to write n 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: nkpx 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, y is 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.

Sample Input

Input

5 3 5 18 43 5 4

Output

4 1

Input

5 3 5 16 45 5 5

Output

-1

Hint

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".

题意:

共有n个数字,已知k个,所有数字不大于p,求剩余未知数字使数字总和不大于x且中位数不小于y。

按y将已知的k个数字分为左和右两边,再在两侧添加n-k个数字,左侧添1,右侧添y以保证总和尽可能的小。

附AC代码:

 1 #include<iostream>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<cmath>
 5 using namespace std;
 6
 7 int n,k,p,x,y,xx,mid;
 8 int a[1100],ans[1100];
 9
10 int main(){
11     while(cin>>n>>k>>p>>x>>y){
12         memset(a,0,sizeof(a));
13         memset(ans,0,sizeof(ans));
14         int sum=0,cnt=0;
15         int l=0,r=0;
16         for(int i=0;i<k;i++){//划分左右
17             cin>>a[i];
18             sum+=a[i];
19             if(a[i]<y)
20             l++;
21             else if(a[i]>=y)
22             r++;
23         }
24         mid=n/2+1;
25         if(l>=mid){//"="  当左边数目大于或等于一半+1时,中位数不可能为>=y
26             cout<<"-1"<<endl;
27             continue;
28         }
29         if(r<=mid){//下方第二组数据时不判定的话xx会为负数。。
30             xx=mid-r;//右侧个数
31         while(xx--){//取右侧最小值y
32             ans[cnt++]=y;
33             sum+=y;
34         }
35         }
36
37         xx=n-r-l-cnt;//剩余数量
38         while(xx--){//取左侧最小值1
39             ans[cnt++]=1;
40             sum++;
41         }
42         if(sum>x){//大于x时同样不符合要求
43             cout<<"-1"<<endl;
44             continue;
45         }
46         else{
47             cout<<ans[0];//保证输出格式
48             for(int i=1;i<cnt;i++){
49                 cout<<" "<<ans[i];
50             }
51             cout<<endl;
52         }
53     }
54     return 0;
55 }
56 /*
57 5 3 5 25 4
58 3 3 3
59 */
60 /*
61 9 7 2 13 1
62 2 2 2 1 1 2 2
63 */
时间: 2024-10-12 18:10:07

B - School Marks的相关文章

Codeforces Round #424 (Div. 2) C. Jury Marks(乱搞)

题目链接:Codeforces Round #424 (Div. 2) C. Jury Marks 题意: 给你一个有n个数序列,现在让你确定一个x,使得x通过挨着加这个序列的每一个数能出现所有给出的k个数. 问合法的x有多少个.题目保证这k个数完全不同. 题解: 显然,要将这n个数求一下前缀和,并且排一下序,这样,能出现的数就可以表示为x+a,x+b,x+c了. 这里 x+a,x+b,x+c是递增的.这里我把这个序列叫做A序列 然后对于给出的k个数,我们也排一下序,这里我把它叫做B序列,如果我

图论(网络流):SPOJ OPTM - Optimal Marks

OPTM - Optimal Marks You are given an undirected graph G(V, E). Each vertex has a mark which is an integer from the range [0..231 – 1]. Different vertexes may have the same mark. For an edge (u, v), we define Cost(u, v) = mark[u] xor mark[v]. Now we

【BZOJ-2400】Spoj839Optimal Marks 最小割 + DFS

2400: Spoj 839 Optimal Marks Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 567  Solved: 202[Submit][Status][Discuss] Description 定义无向图中的一条边的值为:这条边连接的两个点的值的异或值. 定义一个无向图的值为:这个无向图所有边的值的和. 给你一个有n个结点m条边的无向图.其中的一些点的值是给定的,而其余的点的值由你决定(但要求均为非负数),使得这个无向图的值最小

贪心 Codeforces Round #301 (Div. 2) B. School Marks

题目传送门 1 /* 2 贪心:首先要注意,y是中位数的要求:先把其他的都设置为1,那么最多有(n-1)/2个比y小的,cnt记录比y小的个数 3 num1是输出的1的个数,numy是除此之外的数都为y,此时的numy是最少需要的,这样才可能中位数大于等于y 4 */ 5 #include <cstdio> 6 #include <iostream> 7 #include <algorithm> 8 #include <cstring> 9 using na

SPOJ OPTM Optimal Marks

Optimal Marks Time Limit: 6000ms Memory Limit: 262144KB This problem will be judged on SPOJ. Original ID: OPTM64-bit integer IO format: %lld      Java class name: Main You are given an undirected graph G(V, E). Each vertex has a mark which is an inte

UVA 10910 Marks Distribution(组合数学 或 递推)

Marks Distribution Time limit: 3.000 seconds In an examination one student appeared in N subjects and has got total T marks. He has passed in all the Nsubjects where minimum mark for passing in each subject is P. You have to calculate the number of w

CodeForces - 831C Jury marks

Polycarp watched TV-show where k jury members one by one rated a participant by adding him a certain number of points (may be negative, i. e. points were subtracted). Initially the participant had some score, and each the marks were one by one added

cf 540b School Marks 贪心

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 write n progress tests, for each

B. School Marks (CF #301 (Div. 2))

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 write n progress tests, for each