讨论 / 答案啊啊啊啊啊啊啊啊啊啊啊啊啊啊
黛诺 2017-03-24 18:18:24
点我顶贴 收藏 删除
#include<cstdio>

#include<iostream>

#include<cstring>

#include<algorithm>

using namespace std;

struct imp{int x,y;}a[1005];

int n,m,i,j,x,len,lena,t,t1[20005],q[20005],ans[20005],tt[20005],L,R;

bool comp(imp a,imp b)

{

return a.x*a.y<b.x*b.y;

}

void qq(int L,int R)

{

for(int i=1;i<=m;i++)t1[i]*=L;

for(int i=1;i<=m;i++)t1[i+1]+=t1[i]/10,t1[i]%=10;

m++;

while(t1[m]>=10)

{

t1[m+1]=t1[m]/10;

t1[m++]%=10;

}

while(m>1&&t1[m]==0)m--;

len=m;

for(int i=1,j=m;i<=m;i++,j--)

q[i]=t1[j];

int x=0;

for(int i=1;i<=m;i++)

{

tt[i]=(x*10+q[i])/R;

x=(x*10+q[i])%R;

}

x=1;

while(x<m&&tt[x]==0)x++;

int i,j;

for(i=1,j=x;j<=m;i++,j++)

tt[i]=tt[j];

for(j=i;j<=m;j++)tt[i]=0;

len=m-x+1;

}

bool cmp()

{

if(len>lena)return true;

if(len<lena)return false;

for(int i=1;i<=len;i++)

{

if(ans[i]<tt[i]) return true;

if(ans[i]>tt[i]) return false;

}

return false;

}

void QAQ()

{

t1[1]=1;m=1;

for(int i=1;i<=n;i++)

{

qq(a[i-1].x,a[i].y);

if(cmp())

{

memcpy(ans,tt,sizeof(tt));

lena=len;

}

}

for(int i=1;i<=lena;i++)

printf("%d",ans[i]);

}

int main()

{

cin>>n;

for(i=0;i<=n;i++)

cin>>a[i].x>>a[i].y;

sort(a+1,a+n+1,comp);

QAQ();

return 0;

}

查看更多回复
提交回复