Source code for submission s1222

Go to diff to previous submission

grasshop.cpp

  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <stdlib.h>
  4. using namespace std;
  5.  
  6. bool isInArea(int posX, int posY, int destX, int destY)
  7. {
  8. return ((abs(posX - destX) <= 2) &&
  9. (abs(posY - destY) <= 2) );
  10. }
  11.  
  12. bool size3443(int sizeX, int sizeY)
  13. {
  14. return ( ( sizeX >= 3 && sizeY>=4 ) ||
  15. ( sizeX >= 4 && sizeY>=3 ) );
  16. }
  17.  
  18. bool size3223(int sizeX, int sizeY)
  19. {
  20. return ( ( sizeX >= 2 && sizeY>=3 ) ||
  21. ( sizeX >= 3 && sizeY>=2 ) );
  22. }
  23.  
  24. bool size33(int sizeX, int sizeY)
  25. {
  26. return ( sizeX >= 3 && sizeY>=3 );
  27. }
  28.  
  29. int getStepsInArea(int posX, int posY, int destX, int destY, int sizeX, int sizeY)
  30. {
  31. int diffX = abs (destX - posX);
  32. int diffY = abs (destY - posY);
  33. if (size3443(sizeX, sizeY))
  34. {
  35. if ((diffX == 1 && diffY == 0) ||
  36. (diffX == 0 && diffY == 1) ) return 3;
  37. if (diffX == 2 && diffY == 2) return 4;
  38. }
  39.  
  40. if (size33(sizeX, sizeY))
  41. {
  42. if ((diffX == 2 && diffY == 0) ||
  43. (diffX == 0 && diffY == 2) ||
  44. (diffX == 1 && diffY == 1) ) return 2;
  45. }
  46.  
  47. if (size3223(sizeX, sizeY))
  48. {
  49. if ((diffX == 1 && diffY == 2) ||
  50. (diffX == 2 && diffY == 1) ) return 1;
  51. }
  52. return -1111;
  53. }
  54.  
  55.  
  56.  
  57. int main()
  58. {
  59. int sizeX, sizeY, destX, destY, posX, posY, diffX, diffY;
  60. while ( scanf("%d%d%d%d%d%d", &sizeX, &sizeY, &posX, &posY
  61. , &destX, &destY ) == 6 )
  62. {
  63. int stepCount = 0;
  64. while (!isInArea(posX, posY, destX, destY))
  65. {
  66. int goX;
  67. int goY;
  68. diffX = destX - posX;
  69. diffY = destY - posY;
  70. if (abs(diffX) > abs(diffY))
  71. {
  72.  
  73. if (diffX > 0) goX = 2;
  74. else goX = -2;
  75. if (diffY > 0) goY = 1;
  76. else goY = -1;
  77. }
  78. else
  79. {
  80. if (diffY > 0) goY = 2;
  81. else goY = -2;
  82. if (diffX > 0) goX = 1;
  83. else goX = -1;
  84. }
  85. posX+=goX;
  86. posY+=goY;
  87. stepCount++;
  88. }
  89. int stepsInArea = getStepsInArea(posX, posY, destX, destY, sizeX, sizeY);
  90. if (stepsInArea<0) printf ("impossible\n");
  91. else
  92. {
  93. stepCount += stepsInArea;
  94. printf ("%d\n", stepCount);
  95. }
  96. }
  97. return 0;
  98. }
  99.  

Diff to submission s961

grasshop.cpp

--- 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;
         }