CodeForces 540B--填数找中位数
来源:互联网 发布:golang redis pool 编辑:程序博客网 时间:2024/05/22 12:17
题意:
第一行 n,k,p,x,y,有n个任务,已经完成了k个任务,完成任务最大得分为p,最大得分总和是x,众多分数得分的中位数是y,问剩下的任
务该得多少分才能保证分数总和不大于x,而且中位数不小于y。如果不可能出现这种情况则输出-1。
输入:
5 3 5 18 43 5 4
5 3 5 16 45 5 5
1 4
-1
分析:
就是一个不断的添加新数,判断中位数的题目,首先统计已经得到的分数中比y小的分数个数和比y大的分数个数,之后找两个临时
变量l,r表示中位数两边的临界位置,如果中位数大于y,将 l 移动到即将进行任务的位置,如果中位数小于y,则将 l 移动到开头位置,将
r 移动到不小于y的临界位置,之后至于要保证得分总和不大于x 的前提下,不断地在 l 前面添加1,在 l 后面添加y 就好。只有两种
情况会输出-1,已经完成的任务中,中位数小于y,或者最后的得分总和大于x.
代码:
#include <bits/stdc++.h>using namespace std;int main(){ int n,k,p,x,y,a,num1=0,num2=0,sum=0; cin >>n>>k>>p>>x>>y; for(int i=0; i<k; i++) { cin >>a; if(a<y) num1++; else num2++; sum+=a; } int mid=(n+1)/2; if(num1>=mid) cout <<-1<<endl; else { int l,r; if(num2>=n+1-mid) //中位数>y { l=n-k; r=0; } else { l=mid-1-num1; r=n+1-mid-num2; } if(l+r*y+sum>x) cout <<-1<<endl; else { for(int i=1; i<=n-k; i++) { if(i>1) cout <<' '; if(i<=l) cout <<1; else cout <<y; } cout <<endl; } } return 0;}
0 0
- CodeForces 540B--填数找中位数
- CodeForces 289B--中位数
- CodeForces - 540B School Marks (数学思维题 中位数)
- CodeForces 710B Optimal Point on a Line 找中位数
- Educational Codeforces Round 16 B. Optimal Point on a Line(中位数)
- codeforces 540B-贪心
- [CodeForces-540B]
- codeforces 166C Median 中位数
- Codeforces 540B School Marks
- CodeForces 540B School Marks
- codeforces 540B School Marks
- Codeforces 540B - School Marks
- CodeForces 540B School Marks
- School Marks CodeForces - 540B
- codeforces B
- codeforces B
- codeforces B
- codeforces B
- eclipse启动tomcat无法访问
- 视频采集显示分辨率
- form表单关闭历史记录
- CF 700A As Fast As Possible
- nncq---后台所有文章添加一个发布日期修改
- CodeForces 540B--填数找中位数
- jvm类加载器
- 在JS中用EL表达式访问request作用域里面的值得问题
- DB2 新增主键
- Count and Say
- (LeetCode)Bulls and Cows --- 数字匹配问题
- TCP/IP详解学习笔记 这位仁兄写得太好了.
- C#写Windows Service(windows服务程序)
- java学习资源分享