显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
long long zc,maxdis,maxpos=2,temp,temp2,s[100010];
int main(void)
{
freopen("circlea.in","r",stdin);
freopen("circlea.out","w",stdout);
int i,n;
cin>>n;
for (i=1;i<=n;i++)
cin>>s[i];
for (i=1;i<=n;i++)
s[i]=s[i-1]+s[i];
zc=s[n];
s[0]=s[n];
s[n+1]=s[1];
for (i=1;i<=n;i++)
{
temp=abs(s[maxpos]-s[i]);
temp2=zc-temp;
while (temp2>temp)
{
maxpos++;
if (maxpos>n)
maxpos=1;
if (maxpos==i)
{
temp2=0;
break;
}
temp=abs(s[maxpos]-s[i]);
temp2=zc-temp;
}
temp=abs(s[maxpos-1]-s[i]);
if (temp>temp2)
{
if (temp>maxdis)
maxdis=temp;
maxpos--;
if (maxpos<1)
maxpos=n;
}
else
{
if (temp2>maxdis)
maxdis=temp2;
// maxpos=maxpos;
}
}
cout<<maxdis<<endl;
return(0);
}