#include<iostream>
#include<vector>
#include<algorithm>
#include<iomanip>
using namespace std;
#define Max 1000
struct Node{
double Stock;
double Price;
double Rate;
};
bool Comp( Node a, Node b )
{
return a.Rate>b.Rate;
}
int main()
{
int N, M;
Node MoonCake[Max+1];
while( cin>>N>>M )
{
for( int i=0; i<N; i++ )
cin>>MoonCake[i].Stock;
for( int i=0; i<N; i++ ){
cin>>MoonCake[i].Price;
MoonCake[i].Rate = MoonCake[i].Price/MoonCake[i].Stock;
}
sort(MoonCake, MoonCake+N, Comp);
double Ans=0;
for( int i=0; i<N; i++ )
{
if( MoonCake[i].Stock<M )
{
Ans+=MoonCake[i].Price;
M-=MoonCake[i].Stock;
}
else{
Ans+=MoonCake[i].Rate*M;
break;
}
}
cout<<fixed<<setprecision(2)<<Ans<<endl;
}
return 0;
}
2016/5/31
#include<algorithm>
#include<iostream>
#include<vector>
#include<cstdio>
using namespace std;
struct Node
{
double Kucun;
double Zongshoujia;
double Danjia;
};
bool Cmp(const Node &a,const Node &b)
{
return a.Danjia>b.Danjia;
}
int main()
{
int N,D;
while(cin>>N>>D)
{
vector<Node>vec(N);
for(int i=0; i<N; i++)
{
cin>>vec[i].Kucun;
}
for(int i=0; i<N; i++)
{
cin>>vec[i].Zongshoujia;
vec[i].Danjia=vec[i].Zongshoujia/vec[i].Kucun;
}
sort(vec.begin(),vec.end(),Cmp);
// for(int i=0; i<N; i++)
// cout<<vec[i].Zongshoujia<<endl;
double ans=0.0;
int i=0;
while(D)
{
while(vec[i].Kucun!=0&&D!=0)
{
D--;
ans+=vec[i].Danjia;
vec[i].Kucun--;
}
i++;
}
//cout<<ans<<endl;
printf("%.2f\n",ans);
}
return 0;
}