QOJ.ac

QOJ

時間限制: 1 s 記憶體限制: 512 MB 總分: 100 难度: [顯示] 可 Hack ✓

#174. Качество контрольных цифр

统计

Небольшой город, в котором вы живёте, планирует ввести новую систему номеров социального страхования (SSN). Каждому жителю будет присвоен пятизначный номер SSN. Его первые четыре цифры образуют базовый идентификационный номер (0000–9999), а последняя цифра является контрольной цифрой для обнаружения ошибок.

Для вычисления контрольных цифр власти города решили использовать таблицу операции. Таблица операции представляет собой таблицу десятичных цифр размера $10 \times 10$, все диагональные элементы которой равны $0$. Ниже приведены два примера таблиц операции.

Таблица операции 1

$0$ $1$ $2$ $3$ $4$ $5$ $6$ $7$ $8$ $9$
$0$ $0$ $3$ $1$ $7$ $5$ $9$ $8$ $6$ $4$ $2$
$1$ $7$ $0$ $9$ $2$ $1$ $5$ $4$ $8$ $6$ $3$
$2$ $4$ $2$ $0$ $6$ $8$ $7$ $1$ $3$ $5$ $9$
$3$ $1$ $7$ $5$ $0$ $9$ $8$ $3$ $4$ $2$ $6$
$4$ $6$ $1$ $2$ $3$ $0$ $4$ $5$ $9$ $7$ $8$
$5$ $3$ $6$ $7$ $4$ $2$ $0$ $9$ $5$ $8$ $1$
$6$ $5$ $8$ $6$ $9$ $7$ $2$ $0$ $1$ $3$ $4$
$7$ $8$ $9$ $4$ $5$ $3$ $6$ $2$ $0$ $1$ $7$
$8$ $9$ $4$ $3$ $8$ $6$ $1$ $7$ $2$ $0$ $5$
$9$ $2$ $5$ $8$ $1$ $4$ $3$ $6$ $7$ $9$ $0$

Таблица операции 2

$0$ $1$ $2$ $3$ $4$ $5$ $6$ $7$ $8$ $9$
$0$ $0$ $1$ $2$ $3$ $4$ $5$ $6$ $7$ $8$ $9$
$1$ $9$ $0$ $1$ $2$ $3$ $4$ $5$ $6$ $7$ $8$
$2$ $8$ $9$ $0$ $1$ $2$ $3$ $4$ $5$ $6$ $7$
$3$ $7$ $8$ $9$ $0$ $1$ $2$ $3$ $4$ $5$ $6$
$4$ $6$ $7$ $8$ $9$ $0$ $1$ $2$ $3$ $4$ $5$
$5$ $5$ $6$ $7$ $8$ $9$ $0$ $1$ $2$ $3$ $4$
$6$ $4$ $5$ $6$ $7$ $8$ $9$ $0$ $1$ $2$ $3$
$7$ $3$ $4$ $5$ $6$ $7$ $8$ $9$ $0$ $1$ $2$
$8$ $2$ $3$ $4$ $5$ $6$ $7$ $8$ $9$ $0$ $1$
$9$ $1$ $2$ $3$ $4$ $5$ $6$ $7$ $8$ $9$ $0$

С помощью таблицы операции контрольная цифра $e$ для четырёхзначного базового идентификационного номера $abcd$ вычисляется по следующей формуле. Здесь $i \otimes j$ обозначает элемент таблицы в строке $i$ и столбце $j$.

$$e = (((0 \otimes a) \otimes b) \otimes c) \otimes d$$

Например, при использовании Таблицы операции 1 контрольная цифра $e$ для базового идентификационного номера $abcd = 2016$ вычисляется следующим образом.

$$\begin{aligned} e &= (((0 \otimes 2) \otimes 0) \otimes 1) \otimes 6 \\ &= ((1 \otimes 0) \otimes 1) \otimes 6 \\ &= (7 \otimes 1) \otimes 6 \\ &= 9 \otimes 6 \\ &= 6 \end{aligned}$$

Таким образом, номер SSN равен $20166$.

Обратите внимание, что контрольная цифра зависит от используемой таблицы операции. При использовании Таблицы операции 2 для того же базового идентификационного номера $2016$ получается $e = 3$, а весь номер SSN будет равен $20163$.

$$\begin{array}{c} \begin{aligned} 2016 & \\ \Downarrow & \; \text{+контрольная цифра по Таблице операции 2} \\ 20163 & \\ \Downarrow & \; \text{человеческие ошибки} \end{aligned} \\[6pt] \boxed{\begin{array}{c} \overbrace{\mathbf{0}0163 \quad \mathbf{1}0163 \quad \dots \quad \mathbf{9}0163 \quad 2\mathbf{1}163 \quad 2\mathbf{2}163 \quad \dots \quad 2016\mathbf{8} \quad 2016\mathbf{9}}^{\text{Изменение одной цифры}} \\[10pt] \overbrace{\mathbf{02}163 \quad 2\mathbf{10}63 \quad 20\mathbf{61}3 \quad 201\mathbf{36}}^{\text{Перестановка двух соседних цифр}} \end{array}} \end{array}$$

Рисунок B.1. Два вида распространённых человеческих ошибок

Цель добавления контрольной цифры — обнаружение человеческих ошибок при записи или вводе номеров SSN. Следующая функция check способна обнаруживать некоторые человеческие ошибки. Для пятизначного числа $abcde$ функция check определяется следующим образом.

$$\operatorname{check}(abcde) = ((((0 \otimes a) \otimes b) \otimes c) \otimes d) \otimes e$$

Для корректного номера SSN эта функция возвращает $0$. Это объясняется тем, что каждый диагональный элемент таблицы операции равен $0$, а для корректного SSN выполняется $e = (((0 \otimes a) \otimes b) \otimes c) \otimes d$:

$$\operatorname{check}(abcde) = ((((0 \otimes a) \otimes b) \otimes c) \otimes d) \otimes e = e \otimes e = 0.$$

С другой стороны, ненулевое значение, возвращённое функцией check, означает, что данное число не может быть корректным номером SSN. Заметим, что в зависимости от используемой таблицы операции функция check может вернуть $0$ и для некорректного SSN. Какие именно виды ошибок обнаруживаются, зависит от используемой таблицы операции; таблица определяет качество обнаружения ошибок.

Городские власти хотят обнаруживать два вида распространённых человеческих ошибок в последовательностях цифр: изменение одной цифры и перестановку двух соседних цифр, как показано на рисунке B.1.

Таблица операции называется хорошей, если она позволяет обнаружить все распространённые ошибки обоих видов во всех номерах SSN, составленных из четырёхзначных базовых идентификационных номеров 0000–9999. Обратите внимание, что должны обнаруживаться ошибки как в контрольной цифре, так и в четырёх цифрах базового идентификационного номера. Например, Таблица операции 1 является хорошей. Таблица операции 2 не является хорошей, поскольку для числа $20613$, полученного перестановкой 3-й и 4-й цифр корректного номера SSN $20163$, значение $\operatorname{check}(20613)$ равно $0$. На самом деле среди $10000$ базовых идентификационных номеров Таблица операции 2 не может обнаружить одну или более распространённых ошибок сразу для $3439$ базовых идентификационных номеров.

По заданной таблице операции определите, насколько она хороша, подсчитав количество базовых идентификационных номеров, для которых данная таблица не может обнаружить одну или более распространённых ошибок.

Входные данные

Входные данные состоят из одного тестового примера в следующем формате.

$$\begin{array}{cccc} x_{00} & x_{01} & \cdots & x_{09} \\ \vdots & & & \\ x_{90} & x_{91} & \cdots & x_{99} \end{array}$$

Входные данные описывают таблицу операции, где $x_{ij}$ — десятичная цифра в строке $i$ и столбце $j$. Каждая строка входных данных соответствует строке таблицы, элементы в которой разделены одиночными пробелами. Диагональные элементы $x_{ii}$ ($i = 0, \ldots, 9$) всегда равны $0$.

Выходные данные

Выведите количество базовых идентификационных номеров, для которых заданная таблица не может обнаружить одну или более распространённых человеческих ошибок.

Примеры

Входные данные 1

0 3 1 7 5 9 8 6 4 2
7 0 9 2 1 5 4 8 6 3
4 2 0 6 8 7 1 3 5 9
1 7 5 0 9 8 3 4 2 6
6 1 2 3 0 4 5 9 7 8
3 6 7 4 2 0 9 5 8 1
5 8 6 9 7 2 0 1 3 4
8 9 4 5 3 6 2 0 1 7
9 4 3 8 6 1 7 2 0 5
2 5 8 1 4 3 6 7 9 0

Выходные данные 1

0

Входные данные 2

0 1 2 3 4 5 6 7 8 9
9 0 1 2 3 4 5 6 7 8
8 9 0 1 2 3 4 5 6 7
7 8 9 0 1 2 3 4 5 6
6 7 8 9 0 1 2 3 4 5
5 6 7 8 9 0 1 2 3 4
4 5 6 7 8 9 0 1 2 3
3 4 5 6 7 8 9 0 1 2
2 3 4 5 6 7 8 9 0 1
1 2 3 4 5 6 7 8 9 0

Выходные данные 2

3439

Входные данные 3

0 9 8 7 6 5 4 3 2 1
1 0 9 8 7 6 5 4 3 2
2 1 0 9 8 7 6 5 4 3
3 2 1 0 9 8 7 6 5 4
4 3 2 1 0 9 8 7 6 5
5 4 3 2 1 0 9 8 7 6
6 5 4 3 2 1 0 9 8 7
7 6 5 4 3 2 1 0 9 8
8 7 6 5 4 3 2 1 0 9
9 8 7 6 5 4 3 2 1 0

Выходные данные 3

9995

Входные данные 4

0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0

Выходные данные 4

10000

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.