第一次在CF上水题, 果断wa了好几发, 纪念一下,一发水题。
题意:有N门成绩, 已经告知你K门, 在保证N门总和小于X且中位数大于Y的情况, 让你求出剩下N-K门,
题解:
明显 要保证和越小越好, 插入的数字只有1和Y,在插的时候保证中位数合法。记录小于Y的值,然后用1和Y去补缺失的。简单题, 有一点小细节,wa了好几发
代码:
#include<stdio.h>
#include<string.h>
int minn(int a, int b)
{
if(a < b) return a;
return b;
}
int main()
{
int n, k, p, x, y, sum, big, sm, a;
while(scanf("%d", &n) != EOF)
{
sum = sm = 0;
scanf("%d%d%d%d", &k, &p, &x, &y);
for(int i = 0; i < k; i++)
{
scanf("%d", &a);
sum += a;
if(a < y) sm++;
}
if(sm > n/2) {printf("-1\n"); continue;}
sm = minn(n/2-sm, n-k), big = (n-k-sm);
sum += sm;
sum += (big * y);
if(sum > x) {printf("-1\n"); continue;}
else
{
int flag = 1;
for(int i = 1; i <= big; i++)
{
if(flag) printf("%d", y);
else printf(" %d",y);
flag = 0;
}
for(int i = 1; i <= sm; i++)
{
if(flag) printf("1");
else printf(" 1");
flag = 0;
}
printf("\n");
}
}
}