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
#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
原创粉丝点击