Code,思路很好看
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N = 1e5 + 10;
struct node{
ll k, c;
} A[N];
ll sum1, sum2;
bool cmp(node x, node y) {
return 1.0 * (sum1 + x.k) / (sum2 + x.c) > 1.0 * (sum1 + y.k) / (sum2 + y.c);
}
int main() {
ll n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> A[i].k;
}
for (int i = 1; i <= n; i++) {
cin >> A[i].c;
}
sum1 = 0;
sum2 = 0;
sort(A + 1, A + 1 + n, cmp);
for (int i = 1; i <= m; i++) {
sum1 += A[i].k;
sum2 += A[i].c;
sort(A + i + 1, A + 1 + n, cmp);
}
printf("%.3lf", 1.0 * sum1 / sum2);
return 0;
}