Guest User

Untitled

a guest
Dec 19th, 2021
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.42 KB | None | 0 0
  1. """
  2. Лес - задача по информатике
  3.  
  4. Миша заблудился в лесу и пытается выйти из него. Он проходит A шагов на север, затем B шагов на восток, затем C шагов на юг, D шагов на запад, после чего повторяет свои действия (снова A шагов на север, B шагов на восток, C шагов на юг, D шагов на запад и т.д.).
  5.  
  6. Оказалось, что для того, чтобы выйти из леса из его первоначальной точки, ему нужно было пройти ровно K шагов в любом из четырёх направлений, то есть первоначально Миша находится в центре квадрата со стороной 2K шагов.
  7.  
  8. Определите, сколько шагов Миша сделает, прежде чем выйдет из леса (впервые окажется на границе леса).
  9.  
  10. Входные данные
  11. Первые четыре строки входных данных содержат по одному целому положительному числу A, B, C, D — количество шагов, которое Миша делает на север, восток, юг, запад. Пятая строка входных данных содержит целое число K — расстояние от начального расположения Миши до четырёх сторон квадрата (границ леса). Все входные числа не превосходят 109.
  12.  
  13. Выходные данные
  14. Программа должна вывести одно целое число — количество шагов, которое Миша сделает до выхода из леса. Гарантируется, что входные данные таковы, что Миша когда-нибудь выйдет из леса.
  15.  
  16. Обратите внимание, что значение ответа может быть больше, чем возможное значение 32-битной целочисленной переменной, поэтому необходимо использовать 64-битные целочисленные типы данных (тип int64 в языке Pascal, тип long long в C и C++, тип long в Java и C#).
  17.  
  18. Система оценки
  19. Решения, правильно работающие, когда входные числа не превосходят 100, будут оцениваться в 32 балла.
  20.  
  21. Пример
  22. Ввод:
  23. 1
  24. 1
  25. 2
  26. 3
  27. 3
  28. Вывод:
  29. 13
  30.  
  31. Пояснение:
  32. На рисунке изображён пример из условия. Миша делает 1 шаг на север (вверх), 1 шаг на восток (вправо), 2 шага на юг (вниз), 3 шага на запад (влево). От начального расположения Миши до стороны квадрата — 3 шага. Первоначальное расположение Миши и точка выхода из леса обозначены синими кругами. Путь Миши обозначен жёлтой линией. Миша пройдёт 13 шагов, прежде чем впервые окажется на границе леса.
  33. """
  34. from time import time
  35. a = 1
  36. b = 1
  37. c = 2
  38. d = 3
  39. k = 3
  40. #----------------------------------------
  41. ##stt=time()
  42. dx = b-d # смещение x за цикл
  43. dy = a-c # смещение y за цикл
  44. rx = max(b,abs(b-d)) # радиус цикла x
  45. ry = max(a,abs(a-c)) # радиус цикла y
  46. stpc = a+b+c+d # шагов за цикл
  47. ##print(dx, dy, rx, ry, stpc)
  48.  
  49. n_cycl = min((k-rx)//abs(dx), (k-ry)//abs(dy))
  50. if n_cycl < 0:
  51.     n_cycl = 0
  52. ##print(n_cycl)
  53.  
  54. kyp = k - dy*n_cycl
  55. kym = k + dy*n_cycl
  56. kxp = k - dx*n_cycl
  57. kxm = k + dx*n_cycl
  58. x, y = 0, 0
  59. stp = 0
  60. while 1:
  61.     stp += a
  62.     y += a
  63.     if y >= kyp:
  64.         stp -= y - kyp
  65.         break
  66.    
  67.     stp += b
  68.     x += b
  69.     if x >= kxp:
  70.         stp -= x - kxp
  71.         break
  72.  
  73.     stp += c
  74.     y -= c
  75.     if y <= -kym:
  76.         stp -= -y - kym
  77.         break
  78.  
  79.     stp += d
  80.     x -= d
  81.     if x <= -kxm:
  82.         stp -= -x - kxm
  83.         break
  84. print(n_cycl*stpc + stp)
  85. ##print(time()-stt)
  86.  
  87.  
Advertisement
Add Comment
Please, Sign In to add comment