1 条题解

  • 0
    @ 2025-9-28 19:42:32

    水!

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1010;
    const int maxm=1000000;
    struct node
    {
        int a,b;
    }p[maxn];
    int t[maxm];  
    int d[maxm];  
    int ans[maxm];
    int n;
    bool Comp(node x,node y)
    {
        return x.a*x.b<y.a*y.b;
    }
    void Times(int *X,int v,int *Y)  
    {
        int len=X[0];
        for (int i=1; i<=len+20; i++) Y[i]=0;
        for (int i=1; i<=len; i++) 
        {
            Y[i]+=(X[i]*v);
            Y[i+1]+=(Y[i]/10);
            Y[i]%=10;
        }
        while (Y[len+1]>0)
        {
            len++;
            Y[len+1]+=(Y[len]/10);
            Y[len]%=10;
        }
        Y[0]=len;
    }
    void Div(int *X,int v,int *Y)  
    {
        int len=X[0];
        int rest=0;
        for (int i=len; i>=1; i--) 
        {
            rest=rest*10+X[i];
            Y[i]=rest/v;
            rest-=(v*Y[i]);  
        }
        while (!Y[len]) len--;  
        if (!len) len=1;   
        Y[0]=len;
    }
    void Get_max(int *X,int *Y)   
    {
        if (Y[0]<X[0]) return;   
        if (Y[0]==X[0])
        {
        	for (int i=Y[0]; i>=1; i--)
        	{
        		if (Y[i]<X[i]) return;
                else if (Y[i]>X[i]) break;
    		}
    	}
        for (int i=0; i<=Y[0]; i++) X[i]=Y[i];  
    }
    int main()
    {
        scanf("%d",&n);
        for (int i=0; i<=n; i++) scanf("%d%d",&p[i].a,&p[i].b);
        sort(p+1,p+n+1,Comp);
        t[0]=1;
        t[1]=1;
        for (int i=1; i<=n; i++)
        {
            Times(t,p[i-1].a,d);
            for (int j=0; j<=d[0]; j++) t[j]=d[j];
            Div(t,p[i].b,d);
            Get_max(ans,d);
        }
        for (int i=ans[0]; i>=1; i--)
        {
        	printf("%d",ans[i]);  
    	}
        return 0;
    }
    
    
    • 1

    信息

    ID
    309
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者