Задача
Василий на бумажке в виде полоски написал число, кратное d. Его младший брат Дмитрий разрезал число на k частей. Василий решил восстановить написанное число, но столкнулся с проблемой. Он помнил только число d, а чисел, кратных d, можно сложить несколько.
Сколько чисел, кратных числу d, может составить Василий, если составляя исходное число, он использует все части.
Входные данные
В первой строке записано два числа d и k (1≤k<9,1≤d≤100). В следующих k строках находятся части числа. Количество цифр в разрезанных частях не превышает 10.
Выходные данные
Количество разных чисел.
Тесты
Входные данные | Выходные данные |
5 3 13 85 45 |
4 |
11 2 1 111 |
1 |
11 3 11 8 11 |
0 |
71 8 4018916609 7495223237 3405637482 3166003637 8998228133 1141886496 9124347310 7736090711 |
584 |
Код программы
Решение задачи
Согласно свойствам остатков от деления, остаток от деления суммы двух натуральных чисел на натуральное число d совпадает с остатком от деления на d, который при делении на d дает сумма их остатков. А также остаток от деления произведения двух натуральных чисел на натуральное число d совпадает с остатком от деления на d, который при делении на d дает произведение их остатков.
Значит, мы можем решить обычным перебором, но на каждом действии берем остаток от деления на d.
Также части чисел могут совпадать, в связи с чем необходима проверка на то, что мы составленное число еще не записывали. Для этого мы будем хешировать полученное число следующим образом: последнюю цифру умножим на 1010, предпоследнюю — на 1011 и так далее.
Если наш конечный результат делится на d без остатка и если составленное число встречается в первый раз, то увеличиваем счетчик на 1.