poj 2976 Dropping tests(最大化平均值)
来源:互联网 发布:4g逛淘宝用多少流量 编辑:程序博客网 时间:2024/04/30 21:50
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 hi
gh 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
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 hi
#include<cstdio>#include<algorithm>#include<cstring>using namespace std;double y[1500];int a[1500], b[1500],n,k;bool check(double x){for (int i = 0; i < n; i++)y[i] = a[i] - x*b[i];sort(y, y + n);double sum = 0;for (int i = 0; i < k; i++)sum += y[n - i - 1];return sum >= 0;}int main(){while (~scanf("%d%d", &n, &k)&&n+k){k = n - k;for (int i = 0; i < n; i++)scanf("%d", &a[i]);for (int i = 0; i < n; i++)scanf("%d", &b[i]);double l = 0, r = 1e9,mid;for (int i = 0; i < 100; i++){mid = (l + r) / 2;if (check(mid))l = mid;else r = mid;}printf("%.lf\n", r*100);}}
gh 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
solution:
用二分加贪心
设最大化平均值为x
sum(a)/sum(b)>=x; 则 sum(a-x*b)>=0 ; 因此对a-x*b的值进行排序贪心地进行选取即可
0 0
- POJ 2976 Dropping tests (最大化平均值)
- POJ 2976 Dropping tests(最大化平均值)
- poj 2976 Dropping tests(最大化平均值)
- POJ 2976 Dropping tests 【二分:最大化平均值】
- POJ - 2976 Dropping tests(二分搜索:最大化平均值)
- POJ - 2976 Dropping tests(二分查找,最大化平均值)
- POJ 2976 Dropping tests(二分搜索,最大化平均值)
- POJ 2976 Dropping tests(二分查找 最大化平均值)
- POJ2976-Dropping tests-最大化平均值
- POJ 2976 Dropping tests 0/1分数规划问题 最大化平均值 贪心+二分
- (最大化平均值)poj2976,Dropping tests
- POJ2976 Dropping tests 最大化平均值(二分)
- POJ2976 Dropping tests (最大化平均值/二分)
- poj2976 Dropping tests(二分法:最大化平均值)
- poj 2976 Dropping tests
- POJ 2976 Dropping tests
- POJ 2976 Dropping tests
- poj 2976-Dropping tests
- Frame Animation 帧动画
- 【ZYNQ-7000开发之五】PL和PS通过BRAM交互共享数据
- Android之Fragment学习(四)
- 所有Android 开发者都要知道的开发常识
- uva 11149 - Power of Matrix 【倍增 + 矩阵快速幂】
- poj 2976 Dropping tests(最大化平均值)
- 树莓派GPIO引脚
- 【软工文档】机房收费系统之详细设计说明书
- 【设计模式】——总览
- centos7 开启80端口
- C++临时变量什么时候销毁
- Linux下Qt程序的打包发布
- 为什么 Android 手机总是越用越慢?
- ApiDemos之activity切换动画