牛客暑期训练5l

avatar
作者
猴君
阅读量:0

L-知

题意:给定一组数组,每次操作可以选择一个ai变成ai+1,a(i+1)=a(i+1)-1,可以无限次操作。求数组最大乘积。

分析:对于每个ai计算【i,i】,【i,i+1】,。。。【i,n】的平均值的最大值s,将ai减去s即可

代码:

#include<bits/stdc++.h> using namespace std; typedef long long ll; const ll mod=998244353; void sol(){     int n;cin>>n;ll a[n+10],sum[n+10];     for(int i=1;i<=n;i++){         cin>>a[i];     }     sum[0]=0;     for(int i=1;i<=n;i++){         sum[i]=sum[i-1]+a[i];     }     for(int i=1;i<n;i++){         ll s=0;         for(int j=i+1;j<=n;j++){             s=max(s,(sum[j]-sum[i]+a[i])/(j-i+1));         }         if(a[i]<s){             s-=a[i];             a[i]+=s;             a[i+1]-=s;         }     }     ll ans=1;     for(int i=1;i<=n;i++){         ans=ans*a[i];         ans%=mod;     }     cout<<ans<<endl; } int main(){     ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);     int t;cin>>t;     while(t--)sol();     return 0; }

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!