Peking University Online Judge 2976 Dropping tests

二分探索以外出来ない人ですか?(呆れ)
0.5^20≒10^-6で、探索する値は0.0~100.0の範囲内なので、20回も二分探索すれば十分かと(100回やれば間違いないけど、1000回まわすとTLEします)
類題:https://beta.atcoder.jp/contests/abc034/tasks/abc034_d

#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
static const int MAX_N = 1000;

int N, K;
int a[MAX_N], b[MAX_N];

int main(){
	for(;;){
		scanf("%d %d", &N, &K);
		if(N == 0 && K == 0) break;
		for(int i = 0; i < N; i++) scanf("%d", &a[i]);
		for(int i = 0; i < N; i++) scanf("%d", &b[i]);

		double lb = 0.0, ub = 100.0;
		for(int i = 0; i < 20; i++){
			double mid = lb + (ub - lb) / 2.0;
			double x[MAX_N];
			for(int j = 0; j < N; j++){
				x[j] = (double)a[j] - mid / 100.0 * (double)b[j];
			}
			sort(x, x + N);
			reverse(x, x + N);
			double sum = 0.0;
			for(int j = 0; j < N - K; j++) sum += x[j];
			if(sum > 0.0) lb = mid;
			else ub = mid;
		}

		printf("%d\n", (int)floor(lb + 0.5));
	}
	return 0;
}