题目链接:点击打开链接
题意:中文不翻译
题解:水题
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct node{
double k;
double s;
double p;
}a[1005];
bool cmp(node a,node b){
return a.p > b.p;
}
int main(){
int n,m;
cin >> n >> m;
for(int i = 0 ; i < n ; i ++){
cin >> a[i].k;
}
for(int i = 0 ; i < n ; i++){
cin >> a[i].s;
a[i].p = a[i].s / a[i].k;
}
sort(a,a+n,cmp);
double sum = 0;
int i = 0 ;
while(m && i < n){ // 坑点 不小于 n的话会错。 因为 可能库存小于需求
if(m >= a[i].k){
m -= a[i].k;
sum += a[i].s;
i ++;
}
else {
sum += a[i].s * m/a[i].k ;
m = 0;
i++;
}
}
printf("%.2lf\n",sum);
}