#include<cstdio>
#include<algorithm>
using namespace std;
const double eps = 1e-8;
#define Less(a, b) (((a)-(b))<(-eps))
struct moon{
double q; //库存
double p; // 单价
} moons[1001];
bool cmp(moon a, moon b){
return a.p>b.p;
}
int main(){
int N,D;
double q, p;
scanf("%d %d", &N, &D);
for(int i=0;i<N;i++){
scanf("%lf",&moons[i].q);//0保存库存
}
for(int i=0;i<N;i++){
scanf("%lf",&moons[i].p);//1保存总售价/0保存库存
moons[i].p/=moons[i].q;
}
//对单价进行排序
double ans=0.0;
sort(moons, moons+N, cmp);
for(int i=0;i<N;i++){
if( Less(moons[i].q, D)){ // 小于总需求
D-=moons[i].q;
ans+=(moons[i].p*moons[i].q);
}else{ // 大于等于总需求
ans+=D*moons[i].p;
D=0;
break;
}
}
printf("%.2f\n", ans);
}
题目链接:PTA | 程序设计类实验辅助教学平台 (pintia.cn)
https://pintia.cn/problem-sets/994805260223102976/exam/problems/994805301562163200?type=7&page=0