如下图所示的螺旋折线经过平面上所有整点恰好一次。
输入样例:
0 1
输出样例:
3
解题思路:
由于数据规模太大,不能枚举,所以需要找规律。
将平面上的点划分为四部分:从左上角顶点开始的线段,从右上角开始的线段,以及下边和左边的线段。可以先将每一圈的四个顶点螺旋折线长度表示出来,再加上线段距端点的偏移量得到最终距离。具体每个方向上直线的位置以及四个端点的表示在代码中体现。
Java代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int x = scan.nextInt();
int y = scan.nextInt();
scan.close();
int n;//当前处于第几圈
long ans = 0;
if(Math.abs(x) <= y && y >= 0) { //最上面一排(卡坐标在哪一条直线上)
n = y;
ans = (long)(2 * n) * (2 * n - 1) + x - (-n); //端点的距离加上偏移量
}else if(Math.abs(y) <= x && x >= 0) { //右面
n = x;
ans = (long)(2 * n) * (2 * n) + n - y;
}else if(Math.abs(x) <= Math.abs(y) + 1 && y <= 0) { //下面
n = -y;
ans = (long)(2 * n) * (2 * n + 1) + n - x;
}else { //左面
n = -x;
ans = (long)(2 * n - 1) * (2 * n - 1) + y - (x + 1);
}
System.out.println(ans);
}
}