随笔 - 531  文章 - 0  评论 - 3  阅读 - 10215 

 

复制代码
#include <iostream>
#include <algorithm>
using namespace std;

  const int N=1100;
  
 struct T{
     int x,y;
 } a[N];
 int n;
 string c[N][2];
 int cmp(T &a,T &b){
     return a.x*a.y<b.x*b.y;
 }
 
 int compare(string str1,string str2){
    if(str1.length()>str2.length()) return 1;
    else if(str1.length()<str2.length())  return -1;
    else return str1.compare(str2);
}
  string sub(string str1,string str2){
    string str;
    int tmp=str1.length()-str2.length();
    int cf=0;
    for(int i=str2.length()-1;i>=0;i--){
        if(str1[tmp+i]<str2[i]+cf){
            str=char(str1[tmp+i]-str2[i]-cf+'0'+10)+str;
            cf=1;
        }
        else{
            str=char(str1[tmp+i]-str2[i]-cf+'0')+str;
            cf=0;
        }
    }
    for(int i=tmp-1;i>=0;i--){
        if(str1[i]-cf>='0'){
            str=char(str1[i]-cf)+str;
            cf=0;
        }
        else{
            str=char(str1[i]-cf+10)+str;
            cf=1;
        }
    }
    str.erase(0,str.find_first_not_of('0'));
    return str;
}
string add(string str1,string str2){
    string str;
    int len1=str1.length();
    int len2=str2.length();
    
    if(len1<len2){
        for(int i=1;i<=len2-len1;i++)
           str1="0"+str1;
    }
    else{
        for(int i=1;i<=len1-len2;i++)
           str2="0"+str2;
    }
    len1=str1.length();
    int cf=0;
    int temp;
    for(int i=len1-1;i>=0;i--){
        temp=str1[i]-'0'+str2[i]-'0'+cf;
        cf=temp/10;
        temp%=10;
        str=char(temp+'0')+str;
    }
    if(cf!=0)  str=char(cf+'0')+str;
    return str;
}
string mul(string str1,string str2){
    string str;
    int len1=str1.length();
    int len2=str2.length();
    string tempstr;
    for(int i=len2-1;i>=0;i--){
        tempstr="";
        int temp=str2[i]-'0';
        int t=0;
        int cf=0;
        if(temp!=0){
            for(int j=1;j<=len2-1-i;j++)
              tempstr+="0";
            for(int j=len1-1;j>=0;j--){
                t=(temp*(str1[j]-'0')+cf)%10;
                cf=(temp*(str1[j]-'0')+cf)/10;
                tempstr=char(t+'0')+tempstr;
            }
            if(cf!=0) tempstr=char(cf+'0')+tempstr;
        }
        str=add(str,tempstr);
    }
    str.erase(0,str.find_first_not_of('0'));
    return str;
} 
 // a/b  str1->a ,str2->b 
void div(string str1,string str2,string &quotient,string &residue){
    quotient=residue="";
    if(str2=="0"){
        quotient=residue="ERROR";
        return;
    }
    if(str1=="0"){
        quotient=residue="0";
        return;
    }
    int res=compare(str1,str2);
    if(res<0){
        quotient="0";
        residue=str1;
        return;
    }
    else if(res==0){
        quotient="1";
        residue="0";
        return;
    }
    else{
        int len1=str1.length();
        int len2=str2.length();
        string tempstr;
        tempstr.append(str1,0,len2-1);
        for(int i=len2-1;i<len1;i++){
            tempstr=tempstr+str1[i];
            tempstr.erase(0,tempstr.find_first_not_of('0'));
            if(tempstr.empty())
              tempstr="0";
            for(char ch='9';ch>='0';ch--){
                string str,tmp;
                str=str+ch;
                tmp=mul(str2,str);
                if(compare(tmp,tempstr)<=0){
                    quotient=quotient+ch;
                    tempstr=sub(tempstr,tmp);
                    break;
                }
            }
        }
        residue=tempstr;
    }
    quotient.erase(0,quotient.find_first_not_of('0'));
    if(quotient.empty()) quotient="0";
}
 string to_str(int x){
     string str="";
     while(x){
         char t= x%10+'0';
         str+=t;
         x/=10;
     }
     reverse(str.begin(),str.end());
     return str;
 }
 int main(){
 
   cin>>n;
   int i;
   scanf("%d%d",&a[0].x,&a[0].y);
   for(i=1;i<=n;i++) scanf("%d%d",&a[i].x,&a[i].y);
   sort(a+1,a+n+1,cmp);    
    
   string t="1",ans="0";
  
   for(i=0;i<=n;i++){
       c[i][0]=to_string(a[i].x); c[i][1]=to_string(a[i].y);
   }
   for(i=0;i<=n;i++){
       string qu,rest,s;
       div(t,c[i][1],qu,rest);
       
       if(compare(qu,ans)>0) ans=qu;
       t=mul(c[i][0],t);
   }
   cout<<ans;
   
 }
复制代码

 

posted on   towboat  阅读(120)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示