博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Codeforces Round #301 (Div. 2) B】 School Marks
阅读量:4552 次
发布时间:2019-06-08

本文共 1587 字,大约阅读时间需要 5 分钟。

【链接】

【题意】

已知k门成绩.
总共有n门成绩.
让你构造剩下的n-k门成绩,使得这n门成绩的中位数>=y,并且这n门成绩的和要小于等于x.
n为奇数

【题解】

首先判断k门成绩的和是不是小于等于x.
然后x-sum就是剩下的n-k个数字最多能填的和。
可以这样。
既然中位数要大于等于y;
那么转化为让(n+1)/2个数字都大于等于p;
则在剩下的n-k个位置凑足(n+1)/2个p就够了。
凑够了就都用1填就好。

【代码】

#include 
using namespace std;const int N = 1e3;int n,k,p,x,y;int a[N+10];vector
v;void wujie(){ puts("-1"); exit(0);}void buqi(int pos,int rest){ for (int i = pos;i <= n;i++){ v.push_back(1); rest--; if (rest<0) wujie(); }}int main(){ #ifdef LOCAL_DEFINE freopen("rush_in.txt", "rt", stdin); #endif scanf("%d%d%d%d%d",&n,&k,&p,&x,&y); for (int i = 1;i <= k;i++) scanf("%d",&a[i]); int sum1 = 0; for (int i = 1;i <= k;i++) sum1+=a[i]; if (sum1 > x) wujie(); int rest = x - sum1; if (rest < (n-k)) wujie(); int num = 0; for (int i = 1;i <= k;i++) if (a[i]>=y) num++; if (num>=(n+1)/2) buqi(k+1,rest); else{ int need = (n+1)/2 - num; int i; bool flag = true; for (i = k+1;i <= n;i++){ if (rest>=y){ v.push_back(y); rest-=y; need--; if (need==0) break; }else{ flag = false; break; } } if (flag && need==0){ if (i+1<=n) buqi(i+1,rest); }else wujie(); } for (int i = 0,first = 1;i < (int) v.size();i++){ if (!first) putchar(' '); first = 0; printf("%d",v[i]); } return 0;}

转载于:https://www.cnblogs.com/AWCXV/p/7768354.html

你可能感兴趣的文章
Python+Selenium 自动化实现实例-Xpath捕捉元素的几种方法
查看>>
SpringBoot整合Hibernate
查看>>
PPT1 例2
查看>>
extern外部方法使用C#简单例子
查看>>
血液循环结构
查看>>
SQL Server统计数据库中表个数、视图个数、存储过程个数
查看>>
设计模式:观察者模式
查看>>
JVM体系结构之六:堆Heap之1
查看>>
TCP之二:TCP的三次握手与四次分手
查看>>
es的返回数据结构
查看>>
[ActionScript 3.0] as3处理xml的功能和遍历节点
查看>>
linux学习(6)-redhat安装xwindow环境
查看>>
6.28 加法作业
查看>>
CentOS6+nginx+uwsgi+mysql+django1.6.6+python2.6.6
查看>>
【bzoj2829】信用卡凸包 凸包
查看>>
oracle 游标
查看>>
关于拍照那些小事——五一苏行记(三)
查看>>
jquery简单的表单验证充值数量
查看>>
大叔手记(1):使用Visual Studio的查找与替换替代默认的系统搜索
查看>>
Android手机监控软件设计实现
查看>>