1 条题解
-
0
自动搬运
来自洛谷,原作者为

海洋守卫者
不积跬步,无以至千里;不积小流,无以成江海。搬运于
2025-08-24 23:14:59,当前版本为作者最后更新于2025-04-28 16:31:22,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
P12367 [蓝桥杯 2022 省 Python B] 蜂巢
解题思路
容易发现蜂巢间的移动可以看作向量,因此可以构建下图坐标系:

所以,正西方向可以看作为 ,西偏北 可以看作为 ,东偏北 可以看作为 ,正东可以看作为 ,表示东偏南 可以看作为 ,西偏南 可以看作为 。
接着就能够计算出从定点 到点 的向量 ,记为 。然后求出答案。
此时还应当判断 与 的符号。若为同号,可以先在 方向上移动,答案为 ;若为异号,则答案为 。
完整代码
C++:
#include<stdio.h> #include<algorithm> using namespace std; const int dt[8][4]={{-1,0},{0,1},{1,1},{1,0},{0,-1},{-1,-1}}; int a,b,c,d,e,f; inline int p(int d) { return (d+2)%6; } int main() { scanf("%d %d %d %d %d %d",&a,&b,&c,&d,&e,&f); int x=0,y=0,ans; x=dt[a][0]*b+dt[p(a)][0]*c-dt[d][0]*e-dt[p(d)][0]*f; y=dt[a][1]*b+dt[p(a)][1]*c-dt[d][1]*e-dt[p(d)][1]*f; if((x>0&&y>0)||(x<0&&y<0))ans=max(abs(x),abs(y)); else ans=abs(x)+abs(y); printf("%d",ans); return 0; }Python:
def p(x): return (x+2)%6 dt=((-1,0),(0,1),(1,1),(1,0),(0,-1),(-1,-1)) a,b,c,d,e,f=map(int,input().split()) x=dt[a][0]*b+dt[p(a)][0]*c-dt[d][0]*e-dt[p(d)][0]*f y=dt[a][1]*b+dt[p(a)][1]*c-dt[d][1]*e-dt[p(d)][1]*f ans=0 if x*y>0: ans=max(abs(x),abs(y)) else: ans=abs(x)+abs(y) print(ans)
- 1
信息
- ID
- 12189
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 3
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者