#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
struct product{
double inventory;
double sell_price;
double per_price;
};
int kind, demand, i, j, sum;//sum, pre_sum用于计算是否达到市场需求
product *ps, *temp;
int flag_num; //正好达到市场需求时所在的位置
double total_price, pre_sum;
flag_num = total_price = sum = pre_sum = 0;
scanf("%d%d", &kind, &demand);
if ( kind < 1 && kind > 1000 && demand > 500 && demand < 0)
return 0;
ps = (struct product *)malloc( kind * sizeof(struct product));
if ( ps == NULL)
return 0;
for ( i = 0; i < kind ; i++)
scanf("%lf", & ps[i].inventory);
for ( i = 0; i < kind ; i++)
scanf("%lf", & ps[i].sell_price);
for ( i = 0; i < kind; i++)
{
sum += ps[i].inventory;
total_price += ps[i].sell_price;
}
if ( sum <= demand) //需要考虑库存量小于市场需求的这种情况
{
printf("%.2f\n", total_price);
return 0;
}
sum = total_price = 0;
for ( i = 0; i < kind ; i++)
ps[i].per_price = ps[i].sell_price / ps[i].inventory;
temp = (struct product *)malloc(sizeof(struct product));
for( i = 0 ; i< kind -1; i++)
for(j = 0; j< kind-i-1; j++)
{
if ( ps[j].per_price < ps[j + 1].per_price)
{
memcpy( temp, (ps + j), sizeof(ps[0]));
memcpy((ps + j ), (ps + j + 1), sizeof(ps[0]));
memcpy((ps + j + 1) , temp, sizeof(ps[0]));
}
}
//------------------结构体已经按照均价由高到低排好了---------------------
for (i = 1; i < kind; i ++)
{
pre_sum = pre_sum + ps[i - 1].inventory;
sum = pre_sum + ps[i].inventory;
if ( pre_sum <= demand && sum > demand)
{
flag_num = i;
break;
}
}
for (i = 0; i < flag_num; i++)
total_price += ps[i].sell_price;
total_price += (demand - pre_sum) * ps[flag_num].per_price;
printf("%.2f\n", total_price);
free(temp);
free(ps);
return 0;
}