Ctrl K

Разброс фишек по всем раскладкам

Сложная
Есть доска из rows строк и cols столбцов и tokens одинаковых фишек. Раскладка — это способ поставить все фишки на доску так, чтобы в каждой клетке стояло не больше одной фишки. Для одной раскладки посчитаем сумму манхэттенских расстояний по всем парам фишек (расстояние между клетками (r1, c1) и (r2, c2) равно |r1 − r2| + |c1 − c2|). Верните сумму этой величины по всем возможным раскладкам. Ответ может быть огромным, поэтому верните его по модулю 10⁹ + 7.
Пример 1
rows=1, cols=3, tokens=2 → 4

Раскладок три: фишки в клетках 1 и 2 (расстояние 1), 1 и 3 (расстояние 2), 2 и 3 (расстояние 1). Всего 1 + 2 + 1 = 4.

Пример 2
rows=2, cols=2, tokens=3 → 16

Есть 4 способа занять три клетки из четырёх. В каждом две пары фишек стоят рядом (расстояние 1) и одна пара — по диагонали (расстояние 2), то есть сумма 4. Итого 4 · 4 = 16.

Ограничения
  • 1 ≤ rows, cols ≤ 10⁵
  • 2 ≤ rows · cols ≤ 10⁵
  • 2 ≤ tokens ≤ rows · cols
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиДегустаторы и испорченная бочка СложнаяЭфир без частых повторов СложнаяПорядок развоза посылок СложнаяЧестный раздел цветных бусин СложнаяДругие порядки для того же дерева поиска Сложная
загружаем Python…
Вход
rows=1, cols=3, tokens=2
Ожидается
4

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 91 тест на сервере, включая скрытые.