(CodeForces )540B School Marks 贪心 (中位数)

时间:2022-03-13 05:41:03
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  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 space-separated integers: n, k, p, x and y ( ≤ n ≤ , n is odd,  ≤ k < n,  ≤ p ≤ , n ≤ x ≤ n·p,  ≤ 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 ( ≤ 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 + ) /  position in the sorted list of ai. In the first sample the sum of marks equals + + + + = , what doesn't exceed 18, that means that Vova won't be disturbed by his classmates. And the median point of the sequence {, , , , } equals to , 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 '' marks, so even if he gets two '' marks, the sum of marks will be , that is more than the required value of . So, the answer to this test is "-1".

题意 有N道题,已做M题,每题分数a[i],问N-M道题总分不超过S中位数是Y每题分数不超过P;

方法:先求有多少道题分数小于Y,如果ans>N/2 则中位数不是y,否则中位数左边加1右边加y算总和,总和超过s输出-1否则输出1和y。

#include <iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<vector>
#include <math.h>
#include<queue>
#define ll long long
#define INF 0x3f3f3f3f
#define met(a,b) memset(a,b,sizeof(a));
#define N 51100
using namespace std;
int main()
{
int n,m,p,y,s,num;
scanf("%d %d %d %d %d",&n,&m,&p,&s,&y);
int sum=,ans=;
for(int i=;i<=m;i++)
{
scanf("%d",&num);
sum+=num;
if(num<y)
ans++;
}
if(ans<=n/)///判断中位数是否为y
{
int l,r;
l=min(n/-ans,n-m);///有几个1
r=n-l-m;///有几个y
sum+=l+r*y;
if(sum>s)
printf("-1\n");
else
{
for(int i=;i<=l;i++)
{
printf("%d ",); } for(int i=;i<=r;i++)
printf("%d ",y);
puts("");
}
}
else
printf("-1\n");
return ;
}