-
代码
#include <bits/stdc++.h>
using namespace std;
struct obj
{
double t, price, unit_price; //每种吨数 总价 单价
};
int main()
{
int num = 0, t = 0; //种类 需要的总吨数
cin >> num >> t;
vector<obj> moon_cake(num);
double temp;
for (int i = 0; i < num; i++)
{
cin >> temp;
moon_cake[i].t = temp; //读取各个吨数
}
for (int i = 0; i < num; i++)
{
cin >> temp;
moon_cake[i].price = temp; //读取各个价格
moon_cake[i].unit_price = temp / moon_cake[i].t; //计算各个单价
}
vector<double> price_sort;
for (int i = 0; i < num; i++)
{
for (int j = 0; j < moon_cake[i].t; j++)
{
price_sort.push_back(moon_cake[i].unit_price);
}
}
sort(price_sort.begin(), price_sort.end(), greater<double>()); //价格降序排列
double sum_price = 0;
for (int i = 0; i < t; i++)
{
sum_price += price_sort[i];
}
cout << fixed << setprecision(2) << sum_price;
return 0;
}
- 思路
- 读取数据后,算出每种类的每吨单价
- 将所有单价排序,取前n个(既所需吨数)加和
- 备注
数据均定义成double类型,否则会损失精度造成最终答案错误