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); }