Трассировка вектора

Правка ru1, от teraqqq, 2026-04-25 17:21:24

В этом году проходил BSUIR Open XIV, мне было очень приятно съездить в Минск и на само соревнование. Но еще больше мне понравилась задачу, которую я туда предложил. В целом я не видел эту идею раньше, но она кажется достаточно простой, чтобы появиться раньше на каких-нибудь соревнованиях. Так что если вы знаете, где раньше встречалась это идея, то поделитесь, пожалуйста.

Задача. (*BSUIR OPEN XIV*) Дано клеточное поле $$$100 \times 100$$$, в котором между некоторыми клетками проведены стены, также стены проведены по границе поля. Луч запускается из центра клетки $$$(r,c)$$$ в направлении $$$(x,y)$$$. Требуется определить, в какой клетке он окажется, пройдя расстояние $$$\sqrt{x^2+y^2}$$$, если луч отражается от стен. Решение.

Взглянем на вектор $$$(x,y)$$$ и посмотрим, в каком порядке он пересекает вертикальные и горизонтальные линии сетки. В точке $$$(0,0)$$$ пересечение с линиями сетки учитывать не будем, но будем учитывать пересечения в точке $$$(x,y)$$$, причем по формальным причинам мы будем считать, что сначала происходит пересечение с вертикальной прямой.

Последовательность пересечений можно записать в виде строки:

  • R обозначает пересечение вертикальной линии сетки (перемещение на клетку вправо)
  • U обозначает пересечение горизонтальной линии сетки.

Тогда каждому вектору $$$(x,y)$$$ можно сопоставить строку $$$s(x, y)$$$, содержащую последовательность этих пересечений. Например, $$$s(4,3) = RURURRU$$$. Предположим, что $$$x \ge y$$$, это означает, что вектор "пологий", и перед каждым пересечением горизонтальной линии происходит пересечение вертикальной, а именно, перед $$$k$$$-м символом U стоит

$$$ \lfloor \frac{x}{y} \cdot k \rfloor - \lfloor \frac{x}{y} \cdot (k-1) \rfloor $$$

подряд идущих символов R. Таким образом, перед каждым символом U стоит блок, состоящий как минимум из $$$floor(x/y)$$$ символов R, эти блоки вместе с символами U можно сжать в один символ, например:

$ s(4,3) = #RURURRU = (#RU)(#RU)#R#(RU) -> s(1,3)= #UURU $

Таким образом, можно предположить, что если $$$s(x, y, R, U)$$$~-- это строка $$$s(x,y)$$$, где на месте символов R и U стоят строки $$$R$$$ и $$$U$$$, то верно равенство:

Теги number theory, euclid

История

 
 
 
 
Правки
 
 
  Rev. Язык Кто Когда Δ Комментарий
en2 Английский teraqqq 2026-04-25 17:33:50 0 (published)
en1 Английский teraqqq 2026-04-25 17:33:40 7760 Initial revision for English translation (saved to drafts)
ru3 Русский teraqqq 2026-04-25 17:30:17 42 (опубликовано)
ru2 Русский teraqqq 2026-04-25 17:28:23 7273
ru1 Русский teraqqq 2026-04-25 17:21:24 2251 Первая редакция (сохранено в черновиках)