求助,第十个测试点一直过不去
查看原帖
求助,第十个测试点一直过不去
974929
yueyueyue000楼主2023/12/18 21:30
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
typedef long long LL;
const int N=1010;
struct Num
{
    int l;
    int r;
}num[N];
int a,b;
int n;
LL sum[N];
bool cmp(Num a,Num b)
{
    int suma=a.l+a.r,sumb=b.l+b.r;
    return suma<sumb;
   
}
vector<int>mul(vector<int>&a,int b)
{
    int t=0;
    vector<int>C;
    for(int i=0;i<a.size();++i)
    {
        t+=a[i]*b;
        C.push_back(t%10);
        t/=10;
    }
    while(t)C.push_back(t%10),t/=10;
    
    return C;
}
vector<int>div(vector<int>a,int b)
{
    int r=0;
    vector<int>C;
    for(int i=0;i<a.size();++i)
    {
        r=r*10+a[i];
        C.push_back(r/b);//最高位在C[0]
        r%=b;
    }
    reverse(C.begin(),C.end());
    while(C.back()==0&&C.size()>1)C.pop_back();
    reverse(C.begin(),C.end());
    return C;
    
}
bool judge(vector<int>&a,vector<int>&b)//判断a>=b
{
      if(a.size()!=b.size())return a.size()>b.size();
      for(int i=0;i<a.size();++i)
        {
            if(a[i]!=b[i])return a[i]>b[i];
        }
        return true;
}
int main()
{
    vector<int>ans;
    vector<int>A;
   
    ans.push_back(0);
    vector<int>C[N];
    cin>>n;
    cin>>a>>b;
    C[0].push_back(a);
    for(int i=1;i<=n;++i)
    {
        int l,r;
        cin>>l>>r;
        num[i]={l,r};
    }
    sort(num+1,num+1+n,cmp);
    vector<int>tmp[N];
    for(int i=1;i<=n;++i)
    {
        
       C[i]=mul(C[i-1],num[i].l);
       tmp[i]=C[i];//tmp是num[i].l的前缀积
       reverse(tmp[i].begin(),tmp[i].end());
    }
      
    for(int i=1;i<=n;++i)
    {
        tmp[i]=div(tmp[i],num[i].l);
        tmp[i]=div(tmp[i],num[i].r);
        if(judge(tmp[i],ans));//判断二者大小
        ans=tmp[i];
    }
    for(auto t:ans)
    cout<<t;
    return 0;
}
2023/12/18 21:30
加载中...