题解:P12367 [蓝桥杯 2022 省 Python B] 蜂巢
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)