对于环类的问题,用双指针、尺取法的时候要注意high取模(high%n)并且low要从0走到n-1才行,不能像直线型问题high走到n-1就可以停了。
#include <bits/stdc++.h>
using namespace std;
int arr[100050];
int main(void)
{
int n;cin>>n;int sum=0;for (int i=0;i<n;i++) cin>>arr[i],sum+=arr[i];
sum/=2;if (sum==0) sum=1;int low=0,high=0;long long ans=-1,a=0;
while(low<n)
{
a+=arr[high%n];
if (a<=sum) ans=max(ans,a);
while(a>sum&&low<n)
{
a-=arr[low];low++;
}
high=(high+1)%n;
}
cout<<ans;
}