#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e4 + 7;
int ans[10005];
int s[10005] = { 1 };
int slen = 1;//数组s的长度
int n;
struct pe {
int a, b;
}p[N];
bool cmp(pe p1, pe p2);
void mul(int x);
void div(int x);
int main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> n;
for (int i = 0; i <= n; i++)
{
cin >> p[i].a >> p[i].b;
}
//排序
sort(p + 1, p + 1 + n, cmp);
for (int i = 0; i < n; i++)
{
mul(p[i].a);
}
div(p[n].b);
for (int i = slen; i >= 0; i--)
{
cout << ans[i];
}
cout << "\n";
return 0;
}
bool cmp(pe p1, pe p2)
{
return p1.a * p1.b < p2.a * p2.b;
}
void mul(int x)
{
//高精度*低精度x
for (int i = 0; i < slen; i++)
{
s[i] *= x;
}
//进位,注意这里是倒着存的,s[0]为最低位
for (int i = 0; i < slen; i++)
{
s[i + 1] += s[i] / 10;
s[i] = s[i] % 10;
}
while (s[slen] != 0)
{
s[slen + 1] += s[slen] / 10;
s[slen] = s[slen] % 10;
slen++;
}
}
void div(int x)
{
int tem = 0;
//从高位开始
for (int i = slen - 1; i >= 0; i--)
{
ans[i] = s[i] / x;
tem = s[i] % x;//余数
if(i>0) s[i - 1] += tem * 10;
}
//去掉前导0
slen--;
while (ans[slen] == 0 && slen > 0) {
slen--;
}
}
cpp```
真不知道为什么