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

京公网安备 11010502036488号