Go to diff to previous submission
#include <stdio.h> #include <math.h> #include <stdlib.h> using namespace std; bool isInArea(int posX, int posY, int destX, int destY) { return ((abs(posX - destX) <= 2) && (abs(posY - destY) <= 2) ); } bool size3443(int sizeX, int sizeY) { return ( ( sizeX >= 3 && sizeY>=4 ) || ( sizeX >= 4 && sizeY>=3 ) ); } bool size3223(int sizeX, int sizeY) { return ( ( sizeX >= 2 && sizeY>=3 ) || ( sizeX >= 3 && sizeY>=2 ) ); } bool size33(int sizeX, int sizeY) { return ( sizeX >= 3 && sizeY>=3 ); } int getStepsInArea(int posX, int posY, int destX, int destY, int sizeX, int sizeY) { int diffX = abs (destX - posX); int diffY = abs (destY - posY); if (size3443(sizeX, sizeY)) { if ((diffX == 1 && diffY == 0) || (diffX == 0 && diffY == 1) ) return 3; if (diffX == 2 && diffY == 2) return 4; } if (size33(sizeX, sizeY)) { if ((diffX == 2 && diffY == 0) || (diffX == 0 && diffY == 2) || (diffX == 1 && diffY == 1) ) return 2; } if (size3223(sizeX, sizeY)) { if ((diffX == 1 && diffY == 2) || (diffX == 2 && diffY == 1) ) return 1; } return -1111; } int main() { int sizeX, sizeY, destX, destY, posX, posY, diffX, diffY; while ( scanf("%d%d%d%d%d%d", &sizeX, &sizeY, &posX, &posY , &destX, &destY ) == 6 ) { int stepCount = 0; while (!isInArea(posX, posY, destX, destY)) { int goX; int goY; diffX = destX - posX; diffY = destY - posY; if (abs(diffX) > abs(diffY)) { if (diffX > 0) goX = 2; else goX = -2; if (diffY > 0) goY = 1; else goY = -1; } else { if (diffY > 0) goY = 2; else goY = -2; if (diffX > 0) goX = 1; else goX = -1; } posX+=goX; posY+=goY; stepCount++; } int stepsInArea = getStepsInArea(posX, posY, destX, destY, sizeX, sizeY); if (stepsInArea<0) printf ("impossible\n"); else { stepCount += stepsInArea; printf ("%d\n", stepCount); } } return 0; }
--- c4.s961.cteam067.grasshop.cpp.0.grasshop.cpp +++ c4.s1222.cteam067.grasshop.cpp.0.grasshop.cpp @@ -21,4 +21,10 @@ ( sizeX >= 3 && sizeY>=2 ) ); } + +bool size33(int sizeX, int sizeY) +{ + return ( sizeX >= 3 && sizeY>=3 ); +} + int getStepsInArea(int posX, int posY, int destX, int destY, int sizeX, int sizeY) { @@ -29,9 +35,12 @@ if ((diffX == 1 && diffY == 0) || (diffX == 0 && diffY == 1) ) return 3; - + if (diffX == 2 && diffY == 2) return 4; + } + + if (size33(sizeX, sizeY)) + { if ((diffX == 2 && diffY == 0) || (diffX == 0 && diffY == 2) || - (diffX == 1 && diffY == 1) ) return 2; - if (diffX == 2 && diffY == 2) return 4; + (diffX == 1 && diffY == 1) ) return 2; }