除了n和d 其他都用double
#include <iostream>
#include <algorithm>
using namespace std;
struct moon {
double num,tol,price;
} cake[10001];
int cmp(moon a,moon b) {return a.price>b.price;}
int main() {
int n,d;
cin>>n>>d;
double sum=0;
for(int i=0; i<n; i++) cin>>cake[i].num;
for(int i=0; i<n; i++) cin>>cake[i].tol;
for(int i=0; i<n; i++) cake[i].price=cake[i].tol/cake[i].num;
sort(cake,cake+n,cmp);
for(int i=0; d>0 && i<n; i++) {
if(d>cake[i].num) sum+=cake[i].tol;
else sum+=(d*cake[i].price);
d-=cake[i].num;
}
printf("%.2f",sum);
return 0;
}