#include // 黄海写的题解 // https://www.cnblogs.com/littlehb/p/15038424.html using namespace std; const int N = 1010; int n; struct Person { int left, right; } person[N]; bool cmp(const Person &a, const Person &b) { return a.left * a.right < b.left * b.right; } //高精度乘法 vector mul(vector &A, int b) { vector C; int t = 0; for (int i = 0; i < A.size() || t; i++) { if (i < A.size()) t += A[i] * b; C.push_back(t % 10); t /= 10; } while (C.size() > 1 && C.back() == 0) C.pop_back(); return C; } //高精度除法 vector div(vector &A, int b, int &r) { vector C; r = 0; for (int i = A.size() - 1; i >= 0; i--) { r = r * 10 + A[i]; C.push_back(r / b); r %= b; } reverse(C.begin(), C.end()); while (C.size() > 1 && C.back() == 0) C.pop_back(); return C; } //获取两个vector中较大的那个 vector max_vec(vector a, vector b) { if (a.size() > b.size()) return a; if (a.size() < b.size()) return b; if (vector(a.rbegin(), a.rend()) > (vector(b.rbegin(), b.rend()))) return a; return b; } int main() { cin >> n; //输入 for (int i = 0; i <= n; i++) cin >> person[i].left >> person[i].right; //排序 sort(person + 1, person + n + 1, cmp); //队伍中放入国王 vector sum(1, person[0].left); //结果 vector res(1, 0); int r; for (int i = 1; i <= n; i++) { res = max_vec(res, div(sum, person[i].right, r)); sum = mul(sum, person[i].left); } //输出 for (int i = res.size() - 1; i >= 0; i--) cout << res[i]; }