记录编号 279336 评测结果 AAAAAAAAAA
题目名称 [NOIP 2012]国王游戏 最终得分 100
用户昵称 Gravatar0 是否通过 通过
代码语言 C++ 运行时间 0.197 s
提交时间 2016-07-09 07:31:49 内存使用 38.94 MiB
显示代码纯文本
#include<cstdio>
#include<algorithm>
#include<cstring>
 
using namespace std;
 
int n;
 
struct at {
    int l,r;
}a[1010];
 
struct Data{
    int a[5010];
    friend Data operator * (Data a,Data b){
        Data c;
        memset(c.a,0,sizeof(c.a));
        for(int i=1;i<=a.a[0];i++)
            for(int j=1;j<=b.a[0];j++){
                c.a[i+j-1]+=a.a[i]*b.a[j];
                c.a[i+j]+=c.a[i+j-1]/10;
                c.a[i+j-1]%=10;
            }
        c.a[0]=a.a[0]+b.a[0];
        while(c.a[c.a[0]]==0)   c.a[0]--;
        return c;
    }
    friend Data operator / (Data a,int b){
        int yu=0;
        for(int i=a.a[0];i>0;i--){
            int t=yu*10+a.a[i];
            a.a[i]=(t)/b;
            yu=(t)%b;
        }
        while(!a.a[a.a[0]])     a.a[0]--;
        return a;
    }
     
}l[1010],r[1010],now,ans;
 
bool cmp(at a,at b)
{
    return a.r*a.l<b.l*b.r;
}
 
void change(int * a,int b)
{
    while(b){
        a[++a[0]]=b%10;
        b/=10;
    }
    return ;
}
 
bool PD(Data a,Data b)
{
    if(a.a[0]>b.a[0])    return true;
    if(a.a[0]<b.a[0])    return false;
    for(int i=a.a[0];i;i--){
        if(a.a[i]>b.a[i])    return true;
        if(a.a[i]<b.a[i])    return false;
    }
    return false;
}
 
void print(Data x)
{
    for(int i=x.a[0];i>0;i--)
        printf("%d",x.a[i]);
    printf("\n");
}
 
int main()
{
	freopen("kinggame.in","r",stdin);
	freopen("kinggame.out","w",stdout);
    scanf("%d",&n);
    n++;
    for(int i=1;i<=n;i++){
        scanf("%d%d",&a[i].l,&a[i].r);
    }
    sort(a+2,a+n+1,cmp);
    for(int i=1;i<=n;i++){
        change(l[i].a,a[i].l);
    }
    now.a[0]=now.a[1]=1;
    for(int i=1;i<=n;i++){
        Data tp=now/a[i].r;
        if(PD(tp,ans))
            ans=tp;
        now=now*l[i];
    }
    print(ans);
    getchar();
    getchar();
    return 0;
}