80
查看原帖
80
1490301
hzishi楼主2025/2/6 11:16
#include<bits/stdc++.h>
using namespace std;

int a[1010],t[100010],m[100010];
int la,lt,lm,n;
struct P{
    int a,b;
    bool operator <(const P &W)const{
        return a*b < W.a*W.b;
    }
}p[1010];

void mul(int m[],int b,int t[]){
    for (int i = 1;i <= lt;i++) t[i] = 0;
    for (int i = 1;i <= lm;i++) t[i] += m[i]*b;
    lm += 4;
    for (int i = 1;i < lm;i++){
        t[i+1] += t[i] / 10;
        t[i] %=10;
    }
    while(t[lm] == 0&&lm > 1) lm--;
    for (int i = 1;i <=lm;i++) m[i] = t[i];
}

void div(int m[],int b,int t[]){
    for (int i = 1;i <= lt;i++) t[i]=0; // ?
    int r = 0;
    for (int i = lm;i>=1;i--){
        r = r*10 + m[i];
        t[i] = r/b;
        r %=b;
    }
    lt = lm;
    while(t[lt] == 0 && lt > 1) lt--;
}

bool cmp(int a[],int t[]){
    if (lt != la) return la < lt;
    else {
        for (int i = lt;i;i--)
            if (t[i] != a[i]) return a[i]<t[i];
        return false;
    }
}

void upd(int a[],int t[]){
    if (cmp(a,t)) {
        for (int i = lt;i >=1;i--) a[i] = t[i];
        la = lt;
    }
}


int main(){
    cin >> n;
    for (int i = 0;i <= n;i++){
        cin >> p[i].a >> p[i].b;
    }
    sort(p+1,p+n+1);
    m[++lm] = p[0].a;
    for (int i = 1;i <= n;i++){
        div(m,p[i].b,t);
        upd(a,t);
        mul(m,p[i].a,t);
    }
    for (int i = la;i;i--) cout << a[i];
}
2025/2/6 11:16
加载中...