#10 #11过不了为什么
查看原帖
#10 #11过不了为什么
863501
404744496xh楼主2023/8/20 09:46
#include"iostream"
#include"cstring"
#include"algorithm"
#include"cstdlib"
using namespace std;
#define ll long long
const int N=1005;
int kl,kr,n,m=0;
char al[10000],bl[10000],ans[10000];
struct node
{
    ll l;
    ll r;
    ll lr;
}dc[N];

bool cmp(node a,node b){
    return a.lr<b.lr;
}


//字符串反转
void mystrrev(char *k){
    int end=strlen(k)-1;
    int i=0;
    while(i<end){
        swap(k[i],k[end]);
        i++;
        end--;
    }
}

//将longlong转换为string(倒序)
void llStr( ll e,char *k){
    ll t=e;
    int i=0;
    while(t){
        k[i++]=t%10+'0';
        t=t/10;
    }
    k[i]='\0';
}

//将string转换为longlong
ll strll(char *a){
    int ai=0;
    ll num=0;
    while(a[ai]){
        num=num*10+(a[ai++]-'0');
    }
    return num;
}

//高精加高精a+b=c(倒序)
int add(char *a,char *b,char *c){
    int ai=0,bi=0,ci=0;
    int pt=0,t;
    
    while(a[ai]&&b[bi]){
        t=a[ai++]+b[bi++]+pt-'0'-'0';
        c[ci++]=t%10+'0';
        pt=t/10;
    }
    while(a[ai]){
        t=a[ai++]+pt-'0';
        c[ci++]=t%10+'0';
        pt=t/10;
    }
    while(b[bi]){
       t=b[bi++]+pt-'0';
        c[ci++]=t%10+'0';
        pt=t/10;
    }
    while(pt){
         c[ci++]=pt%10+'0';
        pt=pt/10;
    }
    c[ci]='\0';
    return ci;
}

//高精乘低精a*b=c(倒序)
int multiply(char *a,ll b,char *c){
    int ai=0,ci=0,ti;
    int t,pt=0,k,w=0;
    char temp[10000],*e=c;
    temp[0]='\0';
    while(b){
        k=b%10;
        ti=0;
        ai=0;
        while(ti<w){
            e[ti++]='0';
        }

        while(a[ai]){
            t=(a[ai++]-'0')*k+pt;
            e[ti++]=t%10+'0';
            pt=t/10;
        }

        while(pt){
        e[ti++]=pt%10+'0';     
        pt=pt/10;
        }
        e[ti]='\0';
        
        w++;
        e=temp;
        ci=add(c,temp,c);
        b=b/10;
    }
    c[ci]='\0';
    return ci;
}

//高精除低经a/b=c(正序)
int divide(char *a,ll b,char *c){
    int ai=0,ci=0;
    int t,pt=0;
    bool f=false;
    while(a[ai]){
        t=(pt*10+(a[ai]-'0'))/b;
        
        if(t!=0||f){
            f=true;
            c[ci++]=t+'0';
            pt=(pt*10+(a[ai]-'0'))%b;
        }
        else pt=pt*10+(a[ai]-'0')%b;
        ai++;
    }
    c[ci]='\0';
    return ci;
}

int main(){
    scanf("%d",&n);
    scanf("%d%d",&kl,&kr);
    llStr(kl,al);
    char *k=al,*t=bl;
    for(int i=1;i<=n;i++){
        scanf("%lld%lld",&dc[i].l,&dc[i].r);
        dc[i].lr=dc[i].l*dc[i].r;
    }
    sort(dc+1,dc+n+1,cmp);
    for(int i=1;i<n;i++){
        multiply(k,dc[i].l,t);
        swap(k,t);
    }

    mystrrev(k);
    divide(k,dc[n].r,ans);
    cout<<ans<<endl;
    return 0;
}
2023/8/20 09:46
加载中...