太蒟蒻了,虽然会双指针但是这题我还是不会写。
本题思路是,先把所有距离相加,然后除以2,就能得出他的一半周长,然后用双指针维护,如果没有超过一半周长就往后走,否则后面的那个往前走,最后判断所有距离小的最大值。。但是这数据也太弱了,不管怎么写都会对。。。

# include <iostream>
using namespace std;
const int N=100010;
int s[N];
int  n;
int sum=0;
int num=0; 
int main(){
    cin>>n;
    for(int i=0;i<n;i++) {
    cin>>s[i];
    sum+=s[i];
    }
    int cnt=0;
    int x=sum/2;
    int j=0;
    int res=0;
    for(int i=0;i<n;i++){
        while(cnt<x){
            cnt+=s[(j++)%n];
        }     
        res=max(res,min(cnt,sum-cnt));
        cnt-=s[i];
    }
    cout<<res<<endl;
    return 0;
}

总结: 这题知道是双指针的做法,但是有些题目意思没有搞懂,还是需要数据进行卡才能发现自己的错误。