Advertisement
Guest User

Untitled

a guest
Feb 19th, 2018
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.00 KB | None | 0 0
  1. #include <iostream>
  2. #include <climits>
  3. #include <cmath>
  4.  
  5. using namespace std;
  6.  
  7. int px, py, kx, ky, zbir_min = INT_MAX - 1;
  8.  
  9. void trans(int &x, int &y)
  10. {
  11. int tx = x, ty = y;
  12. x = tx - 1 - ((2*tx) % 31);
  13. y = ty + 1 + ((2*tx) % 31);
  14. }
  15.  
  16. void compute(int xi, int yi, int n_trans)
  17. {
  18. int mod = n_trans, mod_x = xi, mod_y = yi, raz = 0;
  19. int zbir2 = 0, tx, ty, zbir_temp = 0;
  20. int x1, y1, x2, y2;
  21.  
  22. for(int i = 0; i < n_trans; i++)
  23. trans(mod_x, mod_y);
  24.  
  25. while(true)
  26. {
  27. x1 = mod_x - 1 - ((2*mod_x) % 31);
  28. y1 = mod_y + 1 + ((2*mod_x) % 31);
  29.  
  30. zbir2 = mod;
  31. x2 = mod_x;
  32. y2 = mod_y;
  33.  
  34. while(x2 > kx)
  35. {
  36. if(abs(kx - x2) < 31)
  37. {
  38. raz = abs(kx - x2);
  39. tx = x2;
  40. ty = y2;
  41. zbir_temp = zbir2;
  42. }
  43. trans(x2, y2);
  44. zbir2++;
  45. }
  46. zbir2 += abs(kx - x2);
  47. if(zbir2 < zbir_min)
  48. zbir_min = zbir2;
  49.  
  50. x2 = tx + raz;
  51. y2 = tx - raz;
  52. zbir2 = zbir_temp;
  53. zbir2 += raz;
  54.  
  55. while(x2 > kx)
  56. {
  57. trans(x2, y2);
  58. zbir2++;
  59. }
  60. zbir2 += abs(kx - x2);
  61. if(zbir2 < zbir_min)
  62. zbir_min = zbir2;
  63.  
  64.  
  65. if(abs(x1 - mod_x ) >= 31)
  66. break;
  67.  
  68. mod_x++;
  69. mod_y--;
  70. mod++;
  71. }
  72. }
  73.  
  74. int main()
  75. {
  76. cin >> px >> py;
  77. cin >> kx >> ky;
  78.  
  79. if((abs(px - kx) != abs(py - ky)) || (px < kx && py < ky ) || (px > kx && py > ky))
  80. {
  81. cout << -1 << endl;
  82. return(0);
  83. }
  84.  
  85. if(px < kx)
  86. {
  87. cout << abs(px - kx) << endl;
  88. return(0);
  89. }
  90.  
  91. compute(px, py, 0);
  92. compute(px, py, 1);
  93.  
  94. int zbir1 = 0;
  95. while(px > kx)
  96. {
  97. trans(px, py);
  98. zbir1++;
  99. }
  100. zbir1 += abs(kx - px);
  101.  
  102. cout << min(zbir1, zbir_min) << endl;
  103.  
  104. return(0);
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement