【Basic Level】
*1020 需注意计算精度问题
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <vector>
using namespace std;
typedef struct
{
float n, p, u;
} moon;
bool cmp(moon p1, moon p2)
{
return p1.u > p2.u;
}
int main()
{
int n, d;
cin >> n >> d;
vector<moon> a(n);
for (int i = 0; i < n; ++i) scanf("%f", &a[i].n);
for (int i = 0; i < n; ++i)
{
scanf("%f", &a[i].p);
a[i].u = a[i].p / a[i].n;
}
sort(a.begin(), a.end(), cmp);
float result = 0;
for (int i = 0; i < n; ++i)
{
if (a[i].n <= d)
{
result += a[i].p;
}
else
{
result += a[i].u * d;
break;
}
d -= a[i].n;
}
printf("%.2f\n", result);
return 0;
}