#include<bits/stdc++.h>
using namespace std;
#define re return
#define inc(i,l,r) for(int i=l;i<=r;++i)
#define dec(i,l,r) for(int i=l;i>=r;--i)
const int power=4,base=10000;
template<typename T>inline void rd(T&x)
{
char c;bool f=0;
while((c=getchar())<'0'||c>'9')if(c=='-')f=1;
x=c^48;
while((c=getchar())>='0'&&c<='9')x=x*10+(c^48);
if(f)x=-x;
}
struct num
{
int a[10005];
num(){memset(a,0,sizeof(a));}
num(int s)
{
memset(a,0,sizeof(a));
int len=0,w;
while(s)
{
if(len%power==0)++a[0],w=1;
a[a[0]]+=(w*(s%10));
w*=10;++len;s/=10;
}
}
inline void print()
{
printf("%d",a[a[0]]);
dec(i,a[0]-1,1)
printf("%04d",a[i]);
}
bool operator<(const num&q)
{
if(a[0]>q.a[0])re 0;
if(a[0]<q.a[0])re 1;
dec(i,a[0],1)if(a[i]!=q.a[i])re a[i]<q.a[i];
re 0;
}
inline void add(int k){if(k||a[0])a[++a[0]]=k;}
inline void rev(){reverse(a+1,a+a[0]+1);}
num operator*(const num&q)
{
num c;
c.a[0]=a[0]+q.a[0]-1;
inc(i,1,a[0])inc(j,1,q.a[0])
{
c.a[i+j-1]+=a[i]*q.a[j];
c.a[i+j]+=c.a[i+j-1]/base;
c.a[i+j-1]%=base;
}
if(c.a[c.a[0]+1])++c.a[0];
re c;
}
num operator-(const num&q)
{
num c;
inc(i,1,a[0])
{
c.a[i]+=a[i]-q.a[i];
if(c.a[i]<0){--c.a[i+1];c.a[i]+=base;}
}
while(a[0]&&c.a[a[0]]==0)--a[0];
c.a[0]=a[0];
re c;
}
num operator/(const int q)
{
num x;
int y=0;
x.a[0]=a[0];
dec(i,a[0],1)
{
x.a[i]=(y*base+a[i])/q;
y=(y*base+a[i])%q;
//高精除以单精
}
while(x.a[0]&&x.a[x.a[0]]==0)--x.a[0];
re x;
}
}p,q,ans,best;
int n,a,b;
struct node
{
int l,r;
}minister[10005];
inline bool cmp(const node &a,const node &b)
{
re a.l*a.r<b.l*b.r;
}
int main()
{
rd(n);
rd(a),rd(b);
inc(i,1,n)rd(minister[i].l),rd(minister[i].r);
sort(minister+1,minister+n+1,cmp);
ans=num(a);
inc(i,1,n)
{
q=ans/minister[i].r;
if(best<q)
best=q;
p=num(minister[i].l);
ans=ans*p;
}
best.print();
}
花了一个小时写高精除以高精,
发现T了4个点(还不如我的random_shuffle呢,random是无所不能的)
再改高精除以单精
~~心好累