题目大意:n门成绩,去掉k门,平均分最大是多少?
解题报告:很难想到用二分来做……Discuss中有官方的解题报告,在下就贴个代码了
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define LL long long
int a[1001];
int b[1001];
double t[1001];
int main()
{
int n,k;
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=1;
while(r-l>1e-5)
{
double m=(l+r)/2;
for(int i=0;i<n;i++)
t[i]=b[i]*m-a[i];
sort(t,t+n);
double sum=0;
for(int i=0;i<k;i++)
sum-=t[i];
if(sum>=0)
l=m;
else
r=m;
}
printf("%d\n",(int)(100*l+0.5));
}
}