想到坐标的转换是重点。参看pku 2265 bee maja
#include
<
iostream
>
#include
<
cmath
>
#include
<
algorithm
>
using
namespace
std;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
//
1 is inlayer 0
//
east ,west ,...
void
getPos(
int
&
x,
int
&
y,
int
l)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
int type,temp,k;
k = ceil((-1+sqrt(1.0+4.0/3.0*l))/2.0);
l-=1+3*k*(k-1);
type=l/k;//确定在哪个方位
temp=l%k;//确定是这个方位的第几个元素
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if(type==1) ...{
x=k;y=-temp;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
} else if(type==2) ...{
x=k-temp;y=-k;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
} else if(type==3) ...{
x=-temp;y=-k+temp;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
} else if(type==4) ...{
x=-k;y=temp;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
} else if(type==5) ...{
x=-k+temp;y=k;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
} else if(type==0) ...{
x=temp;y=k-temp;
if(l==0) y--;
}
return;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
int
main()
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
int a,b;
int x1,y1,x2,y2;
while (scanf("%d%d",&a,&b)!=EOF)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if (a==0)break;
printf("The distance between cells %d and %d is ",a,b);
getPos(x1,y1,a);
getPos(x2,y2,b);
x2-=x1;
y2-=y1;
if (x2*y2>0)
printf("%d",abs(x2+y2));
else
printf("%d",max(abs(x2),abs(y2)));
printf(". ");
}
}