解题思路: 在一篇博客找到的原理图。可以根据此图设计六个方向,x,y轴方向如图所示。
注意事项: 可以注意到点变化的方向只有x轴,y轴,(1,1)和(-1,-1),而没有其他的方向如(-1,1),(1,-1)
参考代码:
d1, p1, q1, d2, p2, q2 = map(int, input().split())
x = [1, 1, 0, -1, -1, 0]
y = [0, 1, 1, 0, -1, -1]
xa = x[d1] * p1 + x[(d1 + 2) % 6] * q1
ya = y[d1] * p1 + y[(d1 + 2) % 6] * q1
xb = x[d2] * p2 + x[(d2 + 2) % 6] * q2
yb = y[d2] * p2 + y[(d2 + 2) % 6] * q2
if xa == xb or ya == yb or (yb - ya) * (xb - xa) > 0: # 保证两点斜率为正或与坐标轴平行
ans = max(abs(xa - xb), abs(ya - yb)) # 比如(4,3)只需要走三次(1,1)方向再加一次(1,0)方向。
else:
ans = abs(xa - xb) + abs(ya - yb) # 其他情况需要分别走x轴方向和y轴方向
print(ans)
0.0分
10 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复