Будем решать задачу динамикой, но для начала нам нужно понять несколько вещей:
1) Каждый подотрезкок длины M отличается от следующего не белее чем в одной позиции тогда и только тогда, когда выполнены 2 условия:
a) Разрежем наш абажур ПОСЛЕ серой лампочки, и дальше разобьем его на R = N/M кусков длины M. Тогда прошлое условие точно должно выполняться для каждого из наших R отрезков.
b) Пусть для лампочки с номером x выполняется color[x] != color[(x + m) % n] и аналогичное условие для y != x. Тогда расстояние между x и y >= m.
(Доказательство почти тривиально=) )
2) Нарисуем такую матрицу M x R, где a[i][j] будет 1, если color[i + j * M] != color[(i + j * M — m) % n]. (столбцы нумеруются слева-направо, строки снизу вверх) В каждом столбце будет не более 1 единички(это по условию a). Тогда из условия b следует, что 1 будут идти слева направо и снизу вверх(график неубывает), потом пустой столбец(возможно несколько), и опять неубывающая последовательность, итп.
3) Рассмотрим строчку с номером m — 1. Она соответствует серой лампочке и следующим после нее на расстоянии кратном m. В ней в начале должно стоять несколько единиц, то есть в начале такая горизонтальная линия идет.
4) В остальных строчках либо пусто, либо есть F единиц. Сколько способов это покрасить, чтобы в конце мы опять вернулись в нужный нам цвет? Это легко считается простейшей динамикой D[F][last_color], можно ее и значительно быстрее считать, но нам это не нужно=)
А теперь начинается самое интересное — динамика для ответа=)
Зафиксируем число пустых столбцов P.
Будем идти по строкам снизу вверх и хранить то, сколько нам нужно поставить еще 1 в эту матрицу. Понятно, что нам надо поставить R — 1 — P единиц(мы не рассматриваем 1 столбец, для него все и так получится хорошо, ведь мы в 4 пункте так специальную дп считали).
dp[rows][ones]
Чтобы ее почитать, переберем сколько 1 мы ставим в эту строку. А дальше через несложные C из n по k понимаем, сколько способов расставить наши 1 в те возрастающие последовательности между P пустыми строки.
Также тут возникает 2 случая, соответственно из пункта 3 и 4.
Ну и нам остается просуммировать по всем P соответствующие dp[M][R — 1 — P].
Вот=)
PS Возможно я где-то накосячил с понятием верх-низ или с +-1, но я думаю суть понятна.
PPS Мы сдали эту задачу в дорешивание, на контесте мы пытались динамику из 4 пункта считать тоже какой-то формулой, но как-то сходу не получилось, и в общем недодебагали, обидно...