这道题求一个环中两点距离的(优弧)最大值,显然这个最大值是不会超过圆环周长的一半的
所以大概的做法是(尺取法):
先求出圆环的周长的一半,从一点开始向后计算距离,如果距离>=周长的一半说明当前点就是到起始点距离最远的点 但是这个距离要是是优弧:即从起始点两个方向到当前点的距离中较小的那个.
然后以同样方式继续
Java AC代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] a = new int[2 * n];
int sum = 0;
for (int i = 0; i < n; ++i) {
a[i] = in.nextInt();
sum += a[i];
}
int h = sum / 2;
int res = 0, l = 0, r = 0, len = 0;
while (l < n) {// 左边界到达终点才算所有的点都计算完成
while (len < h)// 距离未到最大
len += a[r++ % n];// 在数组内循环
if (len == h)// len是l到r的最大距离
res = Math.max(res, len);
else if (len > h)// sum-len是l到r的最大距离
res = Math.max(res, sum - len);
len -= a[l++];
}
System.out.println(res);
}
}