单价,库存数量,总价,需要用浮点存储
struct st {
double kc, dj; //库存,单价
}N[1005];
bool cmp(st a, st b) { //单价排序
return a.dj <= b.dj;
}
int main() {
int n, d;
cin >> n >> d;
for(int i = 0; i < n; i ++) { //输入库存
cin >> N[i].kc;
}
for(int i = 0; i < n; i ++) { //输入总价值,计算单价并存入
double t;
cin >> t;
N[i].dj = t / N[i].kc;
}
sort(N, N + n, cmp); //单价排序
double ans = 0, s = 0; //收益,共给量
for(int i = n - 1; i >= 0; i --) {
if(s + N[i].kc <= d) {
ans += N[i].dj * N[i].kc;
s += N[i].kc;
}
else {
ans += (d - s) * N[i].dj;
break;
}
}
printf("%.02f", ans);
return 0;
}