天天看点

PAT甲级_1070 Mooncake (25 分)

题目描述

思路:

注意给出的是总价,算出单价后先卖单价最高的即可,另外注意都要用double

代码:

#include <bits/stdc++.h>
using namespace std; 

struct Mcake{
	double inv, pri, pp;//库存,总价,单价 
};
Mcake mc[1010]; 
int cmp(Mcake a, Mcake b){
	return a.pp>b.pp;
}

int main()
{
	int n;
    double d;
	cin>>n>>d;
	for(int i=0;i<n;i++) cin>>mc[i].inv;
	for(int i=0;i<n;i++) cin>>mc[i].pri;
	for(int i=0;i<n;i++) mc[i].pp = mc[i].pri/mc[i].inv;
	sort(mc, mc+n, cmp);
	double pro = 0;
    int idx=0;
	while(d>0&&idx<n){//别忘了idx<n,因为可能总库存也不够需求量
		if(mc[idx].inv<=d){
			d -= mc[idx].inv;
			pro += mc[idx].pri;
		}else{
			pro += mc[idx].pp*d;
			d = 0;
		}
		idx++;
	}
	printf("%.2f\n",pro);
	return 0;
}