c题,尺取法
一个点离其他点的最远距离一定是在总距离的一半的两边,详细看代码。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,a[N],sum;
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]),sum+=a[i];
    a[0]=a[n];
    int left=0,ans=0,t=1;
    for(int i=1;i<=n;i++){
        if(left==sum/2){
            ans=left;
            break;
        }
        while(left<sum/2){
            left+=a[(t++)%n];
            ans=max(ans,min(left,sum-left));//离这个点两边的最小值是距离
        }
        left-=a[i];//下一点左边的距离
    }
    printf("%d",ans);
}