题解 | #丢手绢#

丢手绢

https://ac.nowcoder.com/acm/problem/207040

这道题求一个环中两点距离的(优弧)最大值,显然这个最大值是不会超过圆环周长的一半的

所以大概的做法是(尺取法):

先求出圆环的周长的一半,从一点开始向后计算距离,如果距离>=周长的一半说明当前点就是到起始点距离最远的点 但是这个距离要是是优弧:即从起始点两个方向到当前点的距离中较小的那个.

然后以同样方式继续

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);
    }
}
全部评论

相关推荐

程序员小白条:不是哥们,晚了差不多半年多才来找工作啊你得有更强的学历和技术,才能有这种资本啊,现在基本都得1-3年的吧,你这就三个月实习了,而且写的这么模糊
点赞 评论 收藏
分享
02-11 14:29
已编辑
字节跳动_QA
Edgestr:这种的写代码最狠了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务