详细代码c++
时间: 2023-10-16 15:17:00 浏览: 59
以下是详细代码实现:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
double calc_good_rate(int a, int b) {
return (double)a / (a + b);
}
int main() {
int m, a, b;
cin >> m >> a >> b;
double good_rate = calc_good_rate(a, b);
vector<pair<int, int>> costs; // 存储举报差评的花费和效果
for (int i = 0; i < b; i++) {
int cost;
cin >> cost;
costs.push_back({ cost, -1 }); // 差评的效果为 -1
}
sort(costs.begin(), costs.end()); // 按花费升序排序
double max_good_rate = good_rate;
for (int i = 0; i < costs.size() && m >= costs[i].first; i++) {
m -= costs[i].first;
b--; // 差评数减少 1
a++; // 好评数增加 1
double cur_good_rate = calc_good_rate(a, b);
max_good_rate = max(max_good_rate, cur_good_rate);
}
while (m > 0) {
m--; // 花费 1 块钱增加一条好评
a++;
double cur_good_rate = calc_good_rate(a, b);
max_good_rate = max(max_good_rate, cur_good_rate);
}
printf("%.10f\n", max_good_rate);
return 0;
}
```
其中,我们使用了 STL 中的 `vector` 和 `pair`,方便存储和排序。算法的时间复杂度为 O(n log n),其中 n = a + b。
阅读全文