QOJ.ac

QOJ

Límite de tiempo: 1 s Límite de memoria: 512 MB Puntuación total: 100

#174. Calidad de los dígitos de control

Estadísticas

La pequeña ciudad donde vives planea introducir un nuevo sistema de números de seguridad social (SSN). Cada ciudadano se identificará con un SSN de cinco dígitos. Los primeros cuatro indican el número ID básico (0000–9999), y el último es un dígito de control para detectar errores.

Para calcular los dígitos de control, la ciudad ha decidido usar una tabla de operaciones. Es una tabla de $10\times10$ dígitos decimales cuyos elementos diagonales son todos $0$. A continuación se muestran dos ejemplos.

Tabla de operaciones 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$

Tabla de operaciones 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$

Con una tabla de operaciones, el dígito de control $e$ para un número ID básico de cuatro dígitos $abcd$ se calcula con la fórmula siguiente. Aquí, $i\otimes j$ denota el elemento de la fila $i$ y la columna $j$ de la tabla.

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

Por ejemplo, usando la tabla de operaciones 1, el dígito de control $e$ para el número ID básico $abcd=2016$ se calcula de la siguiente manera.

$$\begin{aligned}e&=(((0\otimes2)\otimes0)\otimes1)\otimes6\\&=((1\otimes0)\otimes1)\otimes6\\&=(7\otimes1)\otimes6\\&=9\otimes6\\&=6\end{aligned}$$

Por tanto, el SSN es 20166.

Ten en cuenta que el dígito de control depende de la tabla utilizada. Con la tabla de operaciones 2, tenemos $e=3$ para el mismo número ID básico 2016, y el SSN completo es 20163.

problem_174_53dff41598954b24913036d90ab11313.png

Figura B.1. Dos tipos de errores humanos comunes

El objetivo de añadir el dígito de control es detectar errores humanos al escribir o teclear los SSN. La siguiente función de comprobación puede detectar ciertos errores humanos. Para un número de cinco dígitos $abcde$, se define así:

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

Esta función devuelve $0$ para un SSN correcto. Esto se debe a que todos los elementos diagonales de la tabla son $0$ y, para un SSN correcto, tenemos $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.$$

Por otra parte, un valor no nulo devuelto por $\operatorname{check}$ indica que el número dado no puede ser un SSN correcto. Dependiendo de la tabla usada, la función puede devolver $0$ para un SSN incorrecto. Los tipos de errores detectados dependen de la tabla; esta determina la calidad de la detección de errores.

Las autoridades de la ciudad quieren detectar dos tipos de errores humanos comunes en secuencias de dígitos: cambiar un único dígito e intercambiar dos dígitos adyacentes, como se muestra en la figura B.1.

Una tabla de operaciones es buena si puede detectar todos los errores comunes de ambos tipos en todos los SSN creados a partir de números ID básicos de cuatro dígitos 0000–9999. Deben detectarse los errores tanto en el dígito de control como en los cuatro dígitos del ID básico. Por ejemplo, la tabla de operaciones 1 es buena. La tabla 2 no lo es porque, para 20613, obtenido al intercambiar el tercer y cuarto dígitos del SSN correcto 20163, $\operatorname{check}(20613)=0$. De hecho, entre los 10000 números ID básicos, la tabla 2 no detecta uno o más errores comunes para nada menos que 3439 números.

Dada una tabla de operaciones, determina lo buena que es contando los números ID básicos para los que no puede detectar uno o más errores comunes.

Entrada

La entrada consta de un único caso de prueba con el siguiente formato.

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

La entrada describe una tabla de operaciones, donde $x_{ij}$ es el dígito decimal de la fila $i$ y la columna $j$. Cada línea corresponde a una fila, con sus elementos separados por un único espacio. Los elementos diagonales $x_{ii}$ ($i=0,\ldots,9$) son siempre $0$.

Salida

Imprime el número de números ID básicos para los que la tabla dada no puede detectar uno o más errores humanos comunes.

Ejemplos

Entrada 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

Salida 1

0

Entrada 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

Salida 2

3439

Entrada 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

Salida 3

9995

Entrada 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

Salida 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.