nq1s788

Между домами

Nov 2nd, 2025
649
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.28 KB | None | 0 0
  1. Решение этой задачи очень простое: если 𝑘>𝑠
  2.  или 𝑘⋅(𝑛−1)<𝑠
  3. , ответ «NO». Иначе давайте 𝑘
  4.  раз повторим следующую операцию: пусть 𝑑𝑖𝑠𝑡
  5.  равно 𝑚𝑖𝑛(𝑛−1,𝑠−𝑘+1)
  6.  (мы должны жадно уменьшать оставшуюся дистанцию, но мы также должны помнить о количестве переходов, которое нам необходимо совершить). Перейдем к любому возможному дому, находящемуся на дистанции 𝑑𝑖𝑠𝑡
  7.  от текущего дома (также надо не забывать вычитать 𝑑𝑖𝑠𝑡
  8.  из 𝑠
  9. ).
  10.  
  11. Доказательство факта, что мы всегда можем пойти к дому на дистанции 𝑑𝑖𝑠𝑡
  12. , очень простое: один из возможных ответов (который получается при помощи алгоритма, описанного выше) будет выглядеть как какое-то количество переходов дистанции 𝑛−1
  13. , (возможно) один переход случайной дистанции, меньшей 𝑛−1
  14. , и какое-то количество переходов дистанции 1
  15. . Первая часть ответа может быть получена, если мы стоим около самого левого или самого правого дома, вторая и третья части всегда могут быть получены, потому что расстояния, которые мы будем проходить в каждом из таких ходов, будут меньше 𝑛−1
  16. .
  17.  
  18. Асимптотика решения 𝑂(𝑘)
  19. .
  20.  
  21. def step(cur, x):
  22.     if(cur - x > 0):
  23.         return cur - x
  24.     else:
  25.         return cur + x
  26.  
  27.  
  28.  
  29. n, k, s = map(int, input().split())
  30. cur = 1
  31.  
  32. if(k > s or k * (n - 1) < s):
  33.     print('NO')
  34. else:
  35.     print('YES')
  36.     while(k > 0):
  37.         l = min(n - 1, s - (k - 1))
  38.         cur = step(cur, l)
  39.         print(cur, end = ' ')
  40.         s -= l
  41.         k -= 1
Advertisement
Add Comment
Please, Sign In to add comment