Dropping tests - POJ 2976 二分
2014-05-29 15:04
281 查看
Dropping tests
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
Sample Output
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).
题意:问n对数中去掉k对后的比最大平均数是多少。
思路:这道题用贪心做找最大价值的做法是不对的。二分枚举这个平均数,然后看如果最大平均数是这个,那么sum的和是否大于0,(sum的意思具体见代码吧)。此外这道题在挑战程序设计竞赛中的145页也有代码。
AC代码如下:
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 5774 | Accepted: 2001 |
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).
题意:问n对数中去掉k对后的比最大平均数是多少。
思路:这道题用贪心做找最大价值的做法是不对的。二分枚举这个平均数,然后看如果最大平均数是这个,那么sum的和是否大于0,(sum的意思具体见代码吧)。此外这道题在挑战程序设计竞赛中的145页也有代码。
AC代码如下:
#include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; int n,k; int w[1010]; int v[1010]; double y[1010]; bool solve(double x) { int i; double sum=0; for(i=1;i<=n;i++) y[i]=v[i]-w[i]*x; sort(y+1,y+1+n); for(i=1;i<=n-k;i++) sum+=y[n-i+1]; if(sum>=0) return true; else return false; } int main() { int i,j; while(~scanf("%d%d",&n,&k) && n>0) { double l=0,r=1000000010,mi; for(i=1;i<=n;i++) scanf("%d",&v[i]); for(i=1;i<=n;i++) scanf("%d",&w[i]); for(i=1;i<=300;i++) { mi=(l+r)/2; if(solve(mi)) l=mi; else r=mi; } printf("%.f\n",l*100); } }
相关文章推荐
- poj 2976 Dropping tests,二分
- 二分算法的应用——最大化平均值 POJ 2976 Dropping tests
- POJ 2976 Dropping tests 0/1分数规划问题 最大化平均值 贪心+二分
- 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 (二分答案)
- POJ 2976-Dropping tests(01分数规划_二分||Dinkelbach算法)
- poj 2976 Dropping tests (01规划,二分查找)
- POJ 2976 Dropping tests (01分数规划+二分)
- poj_2976 Dropping tests(01分数规划+二分)
- poj 2976 Dropping tests(01分数规划+二分)
- poj 2976 Dropping tests (二分搜索之最大化平均值之01分数规划)
- POJ 2976 Dropping tests【二分 最大化平均值】
- POJ 2976 Dropping tests【分数规划】【二分搜索】
- [POJ 2976] Dropping tests 二分答案+伪贪心规划