2019年-PTA模拟赛-L2-2 月饼(贪心算法,测试点2.3分析)
测试点分析:
测试点2(库存存在小数),题目没说库存是整数。
测试点3(库存总和无法满足市场需求)
测试点2输入:
3 20
18.1 15.2 10.3
75.5 72.2 45.2
输出:
93.26
测试点3输入:
3 70
18 15 10
75 72 45
输出:
192.00
AcCode:
#include<bits/stdc++.h>
using namespace std;
struct mooncake{
double cnt;
double price;
};
mooncake m[1010];
bool Cmp(const mooncake &a, const mooncake &b){
return a.price > b.price;
}
int main(){
int kds, need, sum = 0, asum = 0;
cin >> kds >> need;
for(int i = 0; i < kds; i++){
double k;
cin >> k;
sum += k;
m[i] = {k, 0};
}
for(int i = 0; i < kds; i++){
double p;
cin >> p;
asum += p;
m[i].price = 1.0 * p / m[i].cnt;
}
if(sum < need){
printf("%.2f", (double)asum);
return 0;
}
sort(m, m + kds, Cmp);
double res = 0;
int idx = 0;
double ned = need;
while(ned){
if(m[idx].cnt <= ned){
res += m[idx].price * m[idx].cnt;
ned -= m[idx].cnt;
idx++;
}else{
res += m[idx].price * ned;
ned -= ned;
}
}
printf("%.2f", res);
return 0;
}