按照月饼的单价排序,使用sort,重载<即可。
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
typedef long long ll;
const int N = 510;
const int mod = 998244353;
struct box{
double x,y;
bool operator<(const box &t) const{
//y1/x1 > y2/x2
return y * t.x > t.y * x; //判断单价
}
};
void solve() {
int n,d;
cin>>n>>d;
vector<box> a(n+1);
for(int i = 1 ; i <= n ; i++){
cin>>a[i].x;
}
for(int i = 1 ; i <= n ; i++){
cin>>a[i].y;
}
sort(a.begin()+1,a.end());
double ans = 0.0;
double sy = d;
for(int i = 1 ; i <= n ; i++){
double need = min(a[i].x,sy);
ans += need * 1.0 * a[i].y / a[i].x;
sy -= need;
if(sy <= 0){
break;
}
}
printf("%.2lf",ans);
}
signed main() {
// ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int tt = 1;
// cin >> tt;
while (tt--) {
solve();
}
return 0;
}