hdu 1030 Delta-Wave
#include <iostream>
#include<math.h>
using namespace std;
int main()
{
double m,n;
int nearest1,nearest2;
int layerDistance,tempDistance,realDistance;
int placeInRow;
while(cin>>m>>n)
{
if(m>n)
{
int k=m;
m=n;
n=k;
}
double m1=sqrt(m);
double n1=sqrt(n);
if(m1-int(m1)!=0)
m1=(int)m1+1;
if(n1-int(n1)!=0)
n1=(int)n1+1;
if(m1==n1)
cout<<(int)n-(int)m;
else
{
layerDistance=2*(n1-m1-1);
placeInRow=m-(m1-1)*(m1-1);
nearest1=placeInRow+(n1-1)*(n1-1);
nearest2=nearest1+layerDistance+2;
tempDistance=layerDistance+2;
if(((int)m%2==0&&int(m1)%2==0)||((int)m%2!=0&&int(m1)%2!=0))
{
tempDistance-=1;
nearest1+=1;
nearest2-=1;
if(nearest1<=n&&nearest2>=n)
{
if((int)nearest1%2==(int)n%2)
realDistance=tempDistance;
else
{
realDistance=tempDistance+1;
}
}
else
{
int t=abs(n-nearest1)>abs(n-nearest2)? abs(n-nearest2):abs(n-nearest1);
realDistance=tempDistance+t;
}
cout<<realDistance;
}
else
{
if(nearest1<=n&&nearest2>=n)
{
if((int)nearest1%2==(int)n%2)
realDistance=tempDistance;
else
{
realDistance=tempDistance+1;
}
}
else
{
int t=abs(n-nearest1)>abs(n-nearest2)? abs(n-nearest2):abs(n-nearest1);
realDistance=tempDistance+t;
}
cout<<realDistance;
}
cout<<endl;
}
}
return 0;
}