A/B Матрица

Правка ru5, от nechaev, 2021-02-03 19:45:23

Вчера решил задачу 1360G - A/B матрица следующим образом 106287665. Хоть мое решение и компактно в реализации, его суть не очевидна и выйти на него было не просто.

Посмотрел в Editorial в надежде, что авторское решение будет проще. Stepavly предлагает подобрать смещение $$$d$$$ такое, что бы выполнялось отношение

$$$ n \cdot d \equiv 0 \mod{m} $$$

Давайте разберемся почему вообще оно должно работать.

Первый важный факт, на который мы будем опираться, установлен равенством

$$$ n \cdot a = m \cdot b, $$$

смысл которого обьясняется в эдиториале.

Из него мы сразу же можем заметить, что

$$$ n \cdot a \equiv 0 \mod{m}, $$$

То есть, в качестве $$$d$$$ мы всегда можем выбрать $$$a$$$ и заполнить матрицу подобно тому, как это указано на картинке снизу

Каково же количество ячеек, заполненых единицами, или, альтернативно, суммарная площадь покрытая разноцветными прямоугольниками? Она равняется $$$n \cdot a$$$. И тут нам пригождается наше уравнение $$$n \cdot a = m \cdot b$$$ потому, что получается, что всеми этими единицами можно заполнить прямоугольник высотой $$$b$$$ и шириной $$$m$$$ как указано на следующей картинке.

Почему же наше заполнение обязательно является однородным? Доказать то, что высота каждой колонки является одинаковой можно по индукции: Пусть после добавления $$$l$$$ кирпичиков у нас имеется какое-то количество полностью заполненых строк $$$\left\lfloor\frac{l \cdot a}{m}\right\rfloor$$$ и последняя строка, в левой части которой находится какое-то количество $$$l \cdot a \bmod m$$$ заполненых ячеек. На следующей итерации мы добавляем кирпичик точно в конец незаполненой строки, потому, что его начало отстоит ровно на $$$a$$$ позиций от начала предыдущего кирпичика, а следовательно интересующее нас свойство снова сохраняется. Ну и разумеется если $$$l=n$$$, мы имеем $$$n \cdot a \bmod m = 0$$$. То есть в каждой колонке действительно будет ровно $$$b$$$ единиц.

История

 
 
 
 
Правки
 
 
  Rev. Язык Кто Когда Δ Комментарий
ru6 Русский nechaev 2021-02-03 20:57:48 0 (опубликовано)
ru5 Русский nechaev 2021-02-03 19:45:23 1 Мелкая правка: 'g)\n\nКакоово же кол' -> 'g)\n\nКаково же кол'
ru4 Русский nechaev 2021-02-03 19:43:31 784 компактное заполнение
ru3 Русский nechaev 2021-02-03 19:25:34 555 Мелкая правка: 'e.png)\n\n' -> 'e.png)\n\n![ ](https://mirror.codeforces.com/10c412/bricks-2.png)'
ru2 Русский nechaev 2021-02-03 19:10:49 85 bricks 1
ru1 Русский nechaev 2021-02-03 16:03:18 760 Первая редакция (сохранено в черновиках)