1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| #include<iostream> #include<algorithm> using namespace std; struct mooncake { double s; double v; double vt; };
bool cmp(mooncake o1,mooncake o2){ return o1.vt<o2.vt; }
int main() { int N; double D; scanf("%d%lf",&N,&D); mooncake list[N+1]; for(int i = 0;i < N;i++){ scanf("%lf", &list[i].s); } for(int i = 0;i <N;i++){ scanf("%lf",&list[i].v); list[i].vt = list[i].v/list[i].s; } sort(list,list+N,cmp); double ans = 0; for(int i = N-1;i>=0;i--){ if(list[i].s<=D){ D-=list[i].s; ans+=list[i].v; } else{ ans+=list[i].vt*D; break; } } printf("%.2f\n",ans); return 0; }
|