Школа программиста

Забыли пароль?
[задачи] [курсы] [олимпиады] [регистрация]
Логин:   Пароль:    
Скрыть меню
О школе
Правила
Олимпиады
Фотоальбом
Гостевая
Форум
Архив олимпиад
Архив задач
Состояние системы
Рейтинг
Курсы
Новичкам
Работа в системе
Курсы ККДП
Дистрибутивы
Статьи
Ссылки


 
[Вернуться к задаче]   1
  1  Шахмуратов Артур Тимурович, 09 июня 2026 г. 16:51:05
     через гальминтона кэли ускорил до O(n) import sys sys.set_int_max_str_digits(300000) def poly_multiply_and_mod(A, B, m): deg_A = len(A) - 1 deg_B = len(B) - 1 C = [0] * (deg_A + deg_B + 1) for i in range(len(A)): if A[i] == 0: continue for j in range(len(B)): C[i + j] += A[i] * B[j] for i in range(len(C) - 1, m - 1, -1): if C[i] == 0: continue lead = C[i] C[i - 1] += lead C[i - m] += lead C[i] = 0 while len(C) > 1 and C[-1] == 0: C.pop() return C with open("INPUT.TXT", "r") as f: data = f.read().split() if data: m = int(data[0]) n = int(data[1]) if n < m: ans = 1 else: res = [1] base = [0, 1] p = n while p > 0: if p % 2 == 1: res = poly_multiply_and_mod(res, base, m)
  2  Шахмуратов Артур Тимурович, 09 июня 2026 г. 16:47:02
     ну тут самое легкое это быстрое возведение матрицы переходов в степень. сложность nlognlogm причем тут динамика непонятно. и п.с сложность по моему недооценена import sys sys.set_int_max_str_digits(300000) def multiply_matrices(A, B): m = len(A) C = [[0] * m for _ in range(m)] for i in range(m): for k in range(m): if A[i][k] == 0: continue for j in range(m): C[i][j] += A[i][k] * B[k][j] return C def power_matrix(A, p): m = len(A) res = [[0] * m for _ in range(m)] for i in range(m): res[i][i] = 1 while p > 0: if p % 2 == 1: res = multiply_matrices(res, A) A = multiply_matrices(A, A) p //= 2 return res with open("INPUT.TXT", "r") as f: data = f.read().split() if data: m = int(data[0]) n = int(data[1]) if n < m: ans = 1 else: T = [[0] * m for _ in range(m)]
  3  Аскаров Айдын Нурлыбекович, 15 августа 2017 г. 9:21:41
     Подскажите хорошую книгу п связи комбинаоики и динамики. Я Формулу комбинторики вывел, но мне трудно его перевести в ДП.
  4  Маймаш Дастан, 21 января 2016 г. 13:37:28
     динамика =)
  5  Некий Неизвестный, 07 ноября 2014 г. 19:48:20
     Почему динамика? Тут комбинаторика заходит за 0.007, да подумать надо немножко, но решение простое.
  6  Хрушков Павел Вадимович, 20 января 2013 г. 4:58:35
     Задача очень похожа на старого-доброго кузнечика (зайчика) )
  7  Акылбек, 14 февраля 2012 г. 15:53:46
     Над задачкой пришлось много думать, пока не нашёл динамическое решение :). Времени ушло много, а кода я написал мало ;)
  8  Ефанов Владимир Алексеевич, 25 августа 2010 г. 19:53:20
     3 9 => 19
  9  Атаян Гарик Артурович, 18 августа 2010 г. 18:31:41
     m=21 n=25 =>6
m=21 n=27 =>8

:)
  10  Мас Мих В, 12 февраля 2010 г. 15:40:27
     а почему раздел не комбинаторика?
  11  Охотников Григорий Иванович, 16 октября 2009 г. 8:55:15
     Просто увеличил размеры типа - Accepted!
  12  Масюк Олег Юрьевич, 16 января 2009 г. 14:06:28
     Тут заполняется матрица наподобии треугольника паскаля, или нет?
     Думаю, что тут все более линейно.
  13  Ладик Артём, 16 октября 2008 г. 16:55:28
     Приведите пожалйста несколько примеров, где n и m примерно около 10
     8 11 => 5; 7 13 => 8; 9 12 => 5
  14  Ладик Артём, 15 октября 2008 г. 23:14:03
     скажите для 2 50 ответ такой 1817497480 ??????
     Для M=2 и N=50 должно получаться 20365011074 вариантов. Обратите внимание: это число не помещается в 4-байтовое целое, возможно ошибка заключается в неверном выборе типа переменной для хранения результата?
 1

Чтобы оставить сообщение необходимо зарегистрироваться и авторизоваться!

Красноярский краевой Дворец пионеров, (c)2006 - 2026, ИНН 246305493507, E-mail: admin@acmp.ru



www.uralkm.ru/czvetnoj-prokat/