PAT乙题1020. 月饼 (25)

2018/01/26 PAT 共 1019 字,约 3 分钟
#include<iostream>
#include<string>
#include<cctype>
#include<vector>
#include<algorithm>
#include<functional>
using namespace std;
struct d {
	double q;
	double lr;//利润
	double bl;//比率
};
bool cmp(d a, d b) {
	return a.bl > b.bl;
}
int main() {
#ifdef LOCAL
	freopen("d:\\datain.txt", "r", stdin);
	//freopen("d:\\dataout.txt", "w", stdout);
#endif LOCAL
	vector<d> data;
	int n, D;
	cin >> n >> D;
	//cout << n << "  " << D << endl;

	for (int i = 0; i <n; i++) {
		d d1;
		scanf("%lf", &d1.q);
		data.push_back(d1);
	}
	for (int i = 0; i <n; i++) {
		scanf("%lf", &data[i].lr);
		data[i].bl = (double)data[i].lr / data[i].q;
	}
	sort(data.begin(), data.end(), cmp);
	//for (int i = 0; i < data.size(); i++) {
	//	cout << data[i].bl << endl;
	//}
	double msy = 0;
	for (int i = 0; i < data.size(); i++) {
		if (D >= data[i].q) {
			msy += data[i].lr;
			D = D - data[i].q;
		}
		else if (D > 0 && D < data[i].q) {
			msy += data[i].bl*D;
			break;
		}
		//if (D == 0||i==data.size()-1) {
		//	printf("%.2f", msy);
		//	break;
		//}
	}
	printf("%.2f", msy);
}

Search

    Table of Contents