noip2012國王遊戲

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn=1010;
int n,now[maxn],ans[maxn],cur[maxn];
struct node{
    int a,b;
}s[maxn];
void ch(int x){
    for(int i=1;i<=now[0];i++){
        now[i]*=x;
    }
    for(int i=1;i<=now[0];i++){
        if(now[i]>=10) now[i+1]+=now[i]/10;
        now[i]%=10;
    }
    while(now[now[0]+1]) ++now[0];
}
bool cmp(node x,node y){
    return x.a*x.b<y.a*y.b;
}
void div(int x){
    int t=0;
    for(int i=now[0];i;i--){
        t=t*10+now[i];
        cur[i]=t/x;
        if(cur[i]!=0&&cur[0]==0){
            cur[0]=i;
        }
        t%=x;
    }
    int f=false;
    if(cur[0]>ans[0]){
        f=true;             
    }
    else{
        if(cur[0]<ans[0]){
            f=false;
            return ;
        }
        else{
            for(int j=ans[0];j>=1;j--){
                if(cur[j]<ans[j]){
                    f=false; break;
                }
                if(cur[j]>ans[j]) {
                    f=true; break;
                }
            }
        }
    }
    if(f){
        for(int j=1;j<=cur[0];j++){
            ans[j]=cur[j];
        }
        ans[0]=cur[0];
    }
}
int main(){
    scanf("%d",&n);
    int a1,b1;
    scanf("%d%d",&a1,&b1);
    for(int i=1;i<=n;i++){
        scanf("%d%d",&s[i].a,&s[i].b);
        /*scanf("%s",s);
        int len=strlen(s)
        for(int j=0;j<len;j++){
            a[i][len-j]=s[j]-'0';
        }*/
    }
    sort(s+1,s+1+n,cmp);
    ans[0]=1; ans[1]=1;
    now[0]=1; now[1]=1;
    //ch(6); div(3);
    ch(a1);
    /*for(int i=now[0];i;i--){
        cout<<now[i];
    }
    cout<<endl;*/
    for(int i=1;i<=n;i++){
        ch(s[i].a);
        div(s[i].a*s[i].b);
    }
    for(int j=ans[0];j>=1;j--){
        printf("%d",ans[j]);
    }
    cout<<endl;
    return 0;
}
發佈了96 篇原創文章 · 獲贊 13 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章