#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int a,b,x1,y1,z1,x2,y2,z2,res,n,m;
while(~scanf("%d%d",&n,&m)){
//a=sqrt(n);
a=(int)(sqrt((double)n-1))+1;
// b=sqrt(m);
b=(int)(sqrt((double)m-1))+1;
x1=(a*a-n)/2+1;
y1=a;
z1=(n-(a-1)*(a-1)-1)/2+1;
x2=(b*b-m)/2+1;
y2=b;
z2=(m-(b-1)*(b-1)-1)/2+1;
res=abs(x1-x2)+abs(y1-y2)+abs(z1-z2);
if(res<0)res=-1*res;
// printf("%d,%d,%d,%d,%d,%d\n",x1,y1,z1,x2,y2,z2);
printf("%d\n",res);
}
return 0;
}
在三角形中建立一个坐标系,x,y,z轴沿如图所示建立,可以求出每个点的坐标
这样每个点就有了唯一的坐标,比如n==2时,n的坐标是(2,2,1),要确定某一个点的坐标,要计算坐标,先算出n在第几行,也就是y轴坐标,然后可以知道该行第一个数a和最后一个数b,(n-a)/2+1是n的x轴坐标,(b-n)/2+1是z轴坐标
计算出两点坐标后,对应坐标相减后取绝对值,然后加起来,就是两点距离。