Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 25137 | Accepted: 8295 |
Descriptionios
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 beui
.spa
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.3d
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
.rest
Inputcode
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.blog
Outputthree
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.ip
Sample Inputci
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
#include<iostream> #include<cstdio> #include<algorithm> #define maxn 1010 #define eps 0.00000001 using namespace std; int n,m,a[maxn],b[maxn]; double c[maxn]; int main(){ freopen("Cola.txt","r",stdin); while(1){ scanf("%d%d",&n,&m); if(n==0&&m==0)return 0; for(int i=1;i<=n;i++)scanf("%d",&a[i]); for(int i=1;i<=n;i++)scanf("%d",&b[i]); double l=0,r=1,mid; while(r-l>=eps){ mid=(l+r)*1.0/2.0; for(int i=1;i<=n;i++) c[i]=1.0*a[i]-mid*b[i]; sort(c+1,c+n+1); double sum=0; for(int i=m+1;i<=n;i++)sum+=c[i]; if(sum>0)l=mid; else r=mid; } int ans=mid*100+0.5; printf("%d\n",ans); } return 0; }