这道题是扔掉K个数,不是留下k个数,然后需要注意的是强制类型转换为int是直接舍去结尾的小数不是四舍五入,floor是向下取整,.f是四舍五入
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <vector>
#include <set>
#include <string>
#include <map>
#include <stack>
#include <queue>
#include <algorithm>
#define fi first
#define se second
#define pb push_back
#define all(x) (x).begin(), (x).end()
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pa;
const int N = 10005;
int n, m;
int a[N], b[N];
bool cmp(double a, double b) {
return a > b;
}
bool judge(double x) {
double c[N];
for (int i = 0; i < n; i++) {
c[i] = a[i] - x * b[i];
}
sort(c, c + n, cmp);
double ans = 0;
for (int i = 0; i < n - m; i++) {
ans += c[i];
}
return ans >= 0;
}
void solve(double l, double r) {
for (int i = 0; i < 100; i++) {
double mid = (l + r) / 2;
if (judge(mid)) l = mid;
else r = mid;
}
printf("%.0f\n", l * 100);
}
int main() {
while (cin >> n >> m && n) {
for (int i = 0; i < n; i++) {
cin >> a[i];
}
for (int i = 0; i < n; i++) {
cin >> b[i];
}
solve(0, 1000000000);
}
return 0;
}