思路:注意对环状结构的理解。找到所有值的最小值minn,然后所有值减去这个最小值,再在环状结构里找一个最长连续正数的长度maxl,答案就是minn*n+maxl。
代码:
#include<bits/stdc++.h> using namespace std; #define ll long long #define pb push_back const int N=2e5+5; const int INF=0x3f3f3f3f; int a[N]; int main() { ios::sync_with_stdio(false); cin.tie(0); int n; int minn=INF; cin>>n; for(int i=0;i<n;i++) cin>>a[i],minn=min(a[i],minn); ll ans=(ll)minn*n; for(int i=0;i<n;i++)a[i]-=minn; int maxl=0; bool f=false; for(int i=0;i<n;i++) { if(f)break; if(a[i]) { int cnt=0; for(int j=i;;j++) { if(j==n)j=0,f=true;//标记一下,不然就在环上死循环了 if(a[j])cnt++; else { i=j; break; } } maxl=max(cnt,maxl); } } cout<<ans+maxl<<endl; return 0; }