lg8365题解
容易发现我们一定会先加后乘,使用调整法可以证明这个结论。
并且可以发现除了值为的数外(假设他们的值和为),其他的数最多只会选个做加法操作(设如果其他的数都不做加法操作,答案为)。并且所有的数都会用加法。使用反证法可以证明
考虑枚举选择的做加法操作的数。那么答案为。
事实上我们需要找到最大的。使用分数类(维护二元组表示,要开long long)即可。
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define mo 1000000007
#define N 1000010
int n,a[N],b[N];
int pw(int x,int y){
int z=1;
while(y){
if(y&1)
z=z*x%mo;
x=x*x%mo;
y>>=1;
}
return z;
}
signed main(){
scanf("%lld",&n);
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
for(int i=1;i<=n;i++)
scanf("%lld",&b[i]);
int ans=1,v1,v2=1,av,s=1;
for(int i=1;i<=n;i++){
if(a[i]==1)
s+=b[i];
ans=ans*a[i]%mo;
}
av=ans*(s%mo)%mo;
v1=s;
for(int i=1;i<=n;i++){
int va=(ans*pw(a[i],mo-2)%mo*(b[i]+s)%mo)%mo;
if(a[i]!=1&&(b[i]+s)*v2>a[i]*v1){
v1=b[i]+s;
v2=a[i];
av=va;
}
}
printf("%lld\n",av);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
2021-02-14 水晶
2021-02-14 醉醺醺的幻想乡