读取每位大臣左手上的整数leftHand和右手上的整数rightHand,并将它们存储在一个结构体Minister中。根据大臣手上的数值进行降序排序。从而降低后面大臣获得的奖赏。初始化一个变量来存储当前乘积,初始值为国王左手上的整数。遍历排序后的大臣列表,对于每位大臣,计算当前乘积除以该大臣右手上的数值,得到该大臣的奖赏,并更新最大奖赏值。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n,kingLeft,kingRight;
struct Minister {
int leftHand;
int rightHand;
};
bool compareMinisters(const Minister &m1, const Minister &m2) {
return m1.leftHand < m2.leftHand;
}
int main() {
cin >> n;
cin >> kingLeft >> kingRight;
vector<Minister> ministers(n);
for (int i = 0; i < n; ++i) {
cin >> ministers[i].leftHand >> ministers[i].rightHand;
}
sort(ministers.begin(), ministers.end(), compareMinisters);
int maxReward = 0;
long long product = kingLeft;
for (const auto &minister : ministers) {
int reward = product / minister.rightHand;
if (reward > maxReward) {
maxReward = reward;
}
product *= minister.leftHand;
}
cout << maxReward << endl;
return 0;
}