grasshop.cpp
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int a,b,c,d,e,f;
while(scanf("%i %i %i %i %i %i",&a,&b,&c,&d,&e,&f)==6)
{
int dx = abs(c-e);
int dy = abs(f-d);
if (dx == 0 && dy == 0)
{
printf("0\n");
continue;
}
if (a < 3 && b < 3)
{
printf("impossible\n");
continue;
}
if (a==3 && b == 3 && c == 2 && d == 2)
{
printf("impossible\n");
continue;
}
if (a==3 && b == 3 && e == 2 && f == 2)
{
printf("impossible\n");
continue;
}
if (a == 2)
{
if (dy%2 != 0)
{
printf("impossible\n");
continue;
}
if ((dy%4 == 0 && dx == 0) || (dy%4 != 0 && dx == 1))
{
printf("%i\n", dy/2);
continue;
}
printf("impossible\n");
continue;
}
if (b == 2)
{
if (dx%2 != 0)
{
printf("impossible\n");
continue;
}
if ((dx%4 == 0 && dy == 0) || (dx%4 != 0 && dy == 1))
{
printf("%i\n", dx/2);
continue;
}
printf("impossible\n");
continue;
}
int n = 0;
while (dx > 2 || dy > 2)
{
if (dx > dy)
{
dx = abs(dx- 2);
dy = abs(dy -1);
}
else
{
dx = abs(dx- 2);
dy = abs(dy -1);
}
n++;
}
if (dx == 0 && dy == 0) n += 0;
if (dx == 0 && dy == 1) n += 3;
if (dx == 0 && dy == 2)
{
if ((a == 3) && ((f == 1) || (f == b-1)) && (e == 2))
n+= 4;
else
n += 2;
}
if (dx == 1 && dy == 0) n += 3;
if (dx == 1 && dy == 1)
{
if ((e == a-1) || (f == b-1) || (e==1) || (f == 1) )
n += 4;
else
n += 2;
}
if (dx == 1 && dy == 2) n += 1;
if (dx == 2 && dy == 0)
{
if ((b == 3) && ((e == 1) || (e == a-1)) && (f == 2))
n+= 4;
else
n += 2;
}
if (dx == 2 && dy == 1) n += 1;
if (dx == 2 && dy == 2) n += 4;
printf("%i\n",n);
continue;
}
return 0;
}