From f9e6d904a1d30f988572249f6cfcb785281b908a Mon Sep 17 00:00:00 2001 From: Zengtudor Date: Sat, 19 Jul 2025 17:01:46 +0800 Subject: [PATCH] update --- src/7/19/P1080.cpp | 148 +++++++++++++++++++++++++++++++++++++++++++++ src/7/19/P1080.py | 32 ++++++++++ 2 files changed, 180 insertions(+) create mode 100644 src/7/19/P1080.cpp create mode 100644 src/7/19/P1080.py diff --git a/src/7/19/P1080.cpp b/src/7/19/P1080.cpp new file mode 100644 index 0000000..afec0be --- /dev/null +++ b/src/7/19/P1080.cpp @@ -0,0 +1,148 @@ +/* +i,j两人情况 +设S为前面所有人的a乘积 +1. i在j前 +max(i,j)=max(s/b[i],s*a[i]/b[j])=s*max(1/b[i],a[i]/b[j]) +2. j在i前 +max(i,j)=max(s*a[j]/b[i],s/b[j])=s*max(a[j]/b[i],1/b[j]) +3.是否交换 + +s*max(1/b[i],a[i]/b[j]) s*max(a[j]/b[i],1/b[j]) + i前j后 j前i后 +s*max(b[j],a[i]*b[i]) s*max(a[j]*b[j],b[i]) +因为所有数>0 +所以谁放前面最大值取决于前面的a*b所以a*b小的放前面,大的放后面 +*/ + +#include +#include +#include +#include +#include +#include +#include +using ll = int64_t; +using int128_t = __int128; +// using int128_t = ll; +ll n; +std::vector> v; + +std::ostream&operator<<(std::ostream&os,int128_t i){ + std::string s; + do { + char tmp = i%10; + i/=10; + s=char(tmp+'0')+s; + }while (i); + os<v; + ll getFirst()const{ + for(ll i=v.size()-1;i>=0;i--){ + if(v[i]!=0)return i; + } + return 0; + } + bool isZero()const{ + return getFirst()==0&&v[0]==0; + } + BigInt(ll n=0):v(100){ + set(n); + } + void set(ll n){ + for(ll i=0;i<(ll)v.size();i++){ + v[i]=0; + } + ll idx{}; + while(n){ + v[idx]=n%10; + n/=10; + idx++; + } + } + BigInt operator*(ll n)const{ + BigInt res; + ll c{}; + for(ll i=0;i<(ll)v.size();i++){ + res.v[i]=v[i]*n; + res.v[i]+=c; + c=res.v[i]/10; + res.v[i]%=10; + } + // if(isZero())throw std::runtime_error("is zero"); + return res; + } + BigInt operator/(ll n)const{ + BigInt res; + ll c{}; + bool isOk=false; + for(ll i=v.size()-1;i>=0;i--){ + if(v[i]!=0||isOk){ + isOk=true; + c+=v[i]; + res.v[i]=c/n; + // std::cout<<"res.v[i]:"<(const BigInt&b){ + ll fa=getFirst(); + ll fb=b.getFirst(); + if(fa!=fb){ + return fa>fb; + } + for(ll i=fa;i>=0;i--){ + if(v[i]!=b.v[i]){ + return v[i]>b.v[i]; + } + } + return false; + } + friend std::ostream&operator<<(std::ostream&os,const BigInt&b){ + bool isOk=false; + for(ll i=b.v.size()-1;i>=0;i--){ + if(isOk||b.v[i]!=0){ + isOk=true; + os<>n; + n++; + v.resize(n+1); + for(ll i=1;i<=n;i++){ + std::cin>>std::get<1>(v[i])>>std::get<2>(v[i]); + std::get<0>(v[i])=std::get<1>(v[i])*std::get<2>(v[i]); + } + std::sort(v.begin()+2,v.end()); + s=s*std::get<1>(v[1]); + for(ll i=2;i<(ll)v.size()-1;i++){ + if(auto a = s/std::get<2>(v[i]);a>ans){ + ans=a; + } + s=s*std::get<1>(v[i]); + } + if(auto a = s/std::get<2>(v[v.size()-1]);a>ans){ + ans=a; + } + std::cout<int: + global idx + idx=idx+1 + return readnum[idx-1] + +n=read()+1 +ans=0 +arr = [[0,0,0] for _ in range(n)] +arr[0][1]=1 + +for i in range(n): + arr[i][1]=read() + arr[i][2]=read() + arr[i][0]=arr[i][1]*arr[i][2] + +arr.sort(key=lambda a:a[0]) +print(arr) +ans=1 +s=1 +for i in range(n-1): + ans=max(ans,int(s/arr[i][2])) + s*=arr[i][1] +ans=max(ans,int(s/arr[n-1][2])) +print(int(ans)) \ No newline at end of file