VK Cup 2017 - Раунд 3 |
---|
Закончено |
Генерация тестов — непростое дело! Часто генерации случайных больших тестов недостаточно, чтобы обеспечить полноценную проверку решений на правильность.
Например, рассмотрим задачу с одного из прошедших раундов Codeforces. Формат ее входных данных выглядит примерно так:
В первой строке записано целое число n (1 ≤ n ≤ maxn) — количество элементов в множестве. Во второй строке в возрастающем порядке записано n различных целых чисел a1, a2, ..., an (1 ≤ ai ≤ maxa) — элементы множества.
Если не обращать внимания на решение задачи, кажется, что сгенерировать хороший тест очень просто. Возьмем n = maxn, возьмем случайные различные ai от 1 до maxa, отсортируем... Далее вы поймете, что это не совсем так.
Решение задачи выглядит следующим образом. Пусть g — наибольший общий делитель a1, a2, ..., an. Пусть x = an / g - n. Тогда правильное решение выводит «Alice», если x нечетно, и «Bob», если x четно.
Рассмотрим два неверных решения задачи, отличающихся от правильного только формулой вычисления величины x.
Первое вычисляет x по формуле x = an / g (без вычитания n).
Второе вычисляет x по формуле x = an - n (без деления на g).
Будем считать тест интересным, если на нем оба неверных решения выдают ответ, отличающийся от правильного.
По данным значениям maxn, maxa и q найдите количество удовлетворяющих ограничениям интересных тестов к задаче и выведите его по модулю q.
Единственная строка содержит три целых числа maxn, maxa и q (1 ≤ maxn ≤ 30 000; maxn ≤ maxa ≤ 109; 104 ≤ q ≤ 105 + 129).
Выведите единственное число — количество удовлетворяющих ограничениям тестов, на которых оба приведенных неверных решения выдают ответ, отличающийся от правильного, по модулю q.
3 6 100000
4
6 21 100129
154
58 787788 50216
46009
В первом примере интересные тесты выглядят следующим образом:
1 1 1 3
2 4 6 2 4 6
Название |
---|