【poj 2976】 Dropping tests 二分(分数优化)
2016-06-01 18:42
381 查看
题目:http://poj.org/problem?id=2976
Dropping tests
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 9121 Accepted: 3194
Description
In a certain course, you take n tests. If you get ai out of bi questions correct on test i, your cumulative average is defined to be
.
Given your test scores and a positive integer k, determine how high you can make your cumulative average if you are allowed to drop any k of your test scores.
Suppose you take 3 tests with scores of 5/5, 0/1, and 2/6. Without dropping any tests, your cumulative average is . However, if you drop the third test, your cumulative average becomes .
Input
The input test file will contain multiple test cases, each containing exactly three lines. The first line contains two integers, 1 ≤ n ≤ 1000 and 0 ≤ k < n. The second line contains n integers indicating ai for all i. The third line contains n positive integers indicating bi for all i. It is guaranteed that 0 ≤ ai ≤ bi ≤ 1, 000, 000, 000. The end-of-file is marked by a test case with n = k = 0 and should not be processed.
Output
For each test case, write a single line with the highest cumulative average possible after dropping k of the given test scores. The average should be rounded to the nearest integer.
Sample Input
3 1
5 0 2
5 1 6
4 2
1 2 7 9
5 6 7 9
0 0
Sample Output
83
100
Hint
To avoid ambiguities due to rounding errors, the judge tests have been constructed so that all answers are at least 0.001 away from a decision boundary (i.e., you can assume that the average is never 83.4997).
Source
题意:最大化平均值
思路:贪心是错的,分数优化即可;
判断时a_i – x * b_i排序前k》=0————》true
代码:
Dropping tests
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 9121 Accepted: 3194
Description
In a certain course, you take n tests. If you get ai out of bi questions correct on test i, your cumulative average is defined to be
.
Given your test scores and a positive integer k, determine how high you can make your cumulative average if you are allowed to drop any k of your test scores.
Suppose you take 3 tests with scores of 5/5, 0/1, and 2/6. Without dropping any tests, your cumulative average is . However, if you drop the third test, your cumulative average becomes .
Input
The input test file will contain multiple test cases, each containing exactly three lines. The first line contains two integers, 1 ≤ n ≤ 1000 and 0 ≤ k < n. The second line contains n integers indicating ai for all i. The third line contains n positive integers indicating bi for all i. It is guaranteed that 0 ≤ ai ≤ bi ≤ 1, 000, 000, 000. The end-of-file is marked by a test case with n = k = 0 and should not be processed.
Output
For each test case, write a single line with the highest cumulative average possible after dropping k of the given test scores. The average should be rounded to the nearest integer.
Sample Input
3 1
5 0 2
5 1 6
4 2
1 2 7 9
5 6 7 9
0 0
Sample Output
83
100
Hint
To avoid ambiguities due to rounding errors, the judge tests have been constructed so that all answers are at least 0.001 away from a decision boundary (i.e., you can assume that the average is never 83.4997).
Source
题意:最大化平均值
思路:贪心是错的,分数优化即可;
判断时a_i – x * b_i排序前k》=0————》true
代码:
#include<iostream> #include<queue> #include<cmath> #include<stdio.h> #include<algorithm> using namespace std; int n,k; double a[1005],b[1005]; double y[1005]; double cmp(double a,double b) { return a>b; } bool C(double x) { double tmp=0; for(int i=1;i<=n;i++) { y[i]=a[i]-x*b[i]; } sort(y+1,y+1+n,cmp); for(int i=1;i<=k;i++) { tmp+=y[i]; } if(tmp>=0) return 1; return 0; } void solve() { double l=0,r=1.0,mid; for(int i=0;i<100;i++) { mid=(l+r)/2; if(C(mid)) { l=mid; }else r=mid; } printf("%.0lf\n",(double)mid*100.0); } int main() { while(scanf("%d%d",&n,&k)!=EOF) { if(!n&&!k) return 0; for(int i=1;i<=n;i++) { scanf("%lf",&a[i]); } for(int j=1;j<=n;j++) scanf("%lf",&b[j]); k=n-k; solve(); } return 0; }
相关文章推荐
- centos禁用防火墙
- linux下crond调度
- Linux命令-find
- TIPTOP如何修改默认菜单
- STORM_0005_第一个非常简单的storm topology的提交运行
- ccah-500 第20题 What is the result when you execute: hadoop jar SampleJar MyClass
- Linux权限简述
- linux实践程序破解
- linux下安装jboss
- Linux下MySQL源码包手动安装、配置以及测试
- crontab 重定向错误日志 加上时间
- Tomcat显示文件目录&文件列表
- python linux 磁盘操作
- Linux常用命令--tac
- Tomcat双击startup.bat出现一闪而过,无法启动
- HDU5692 dfs + 线段树维护区间最大值
- 【OpenCV_10】 创建滑动条Trackbar & 图像对比度、亮度值调整
- apache配置虚拟主机及虚拟目录
- Maven项目部署到Tomcat7服务器
- Linux上查看造成IO高负载的进程