有几个特殊的点(a, a), (a, -a), (-a, -a)比如从(a, a)出发,设n = 2 * a,那么接下来变化规律为n, n - 1, n-1,n-2,n-2 .... 2,2,1,1,直接用求和公式算即可,其他两个点也是这个规律,就是第一项需要做一下处理,根据点的坐标判断这个点是在正方形的哪条变上,然后映射到离他近的这三个点中的一个即可。
[x, y] = list(map(int, input().strip().split(' ')))
d_x, d_y = 0, 0
res = 0
if abs(x) == abs(y):
d_x = x
d_y = y
elif x >= 0 and abs(y) < abs(x): # 这个点在正方形的右边,映射到(x, x)
d_x = x
d_y = x
res += abs(y - d_y) # 补上路程
elif abs(y) > abs(x): # 这个点在正方形的上下两条边,映射到(-y, y)
d_y = y
d_x = -y
res += abs(x - d_x)
else: # 这个点在正方形的左边,第三象限的顶点横纵坐标绝对值不等,我们映射到第二象限的顶点
d_x = x
d_y = -x
res -= abs(y - d_y) # 这样映射实际上多走了路程,需要减掉
n = 0
if d_x > 0 and d_y > 0: #第一象限的顶点规律为5,4,4,3,3 ...
n = d_x * 2
res += (1 + n)* n - n # 去掉多加的一个n
elif d_x > 0 and d_y < 0:
n = d_x * 2
res += (1 + n) * n
elif d_x < 0 and d_y > 0:
n = d_y * 2 - 1
res += (1 + n) * n
else:
res = 0
print(res)
0 回复
0 转发
0 喜欢
0 阅读



