QOJ.ac

QOJ

Límite de tiempo: 1 s Límite de memoria: 512 MB Puntuación total: 100 Dificultad: [mostrar] Hackeable ✓

#174. Qualité des chiffres de contrôle

Estadísticas

La petite ville où vous habitez prévoit d'introduire un nouveau système de numéros de sécurité sociale (SSN). Chaque citoyen sera identifié par un SSN à cinq chiffres. Ses quatre premiers chiffres indiquent le numéro d'identification de base (0000–9999) et le dernier chiffre est un chiffre de contrôle permettant de détecter les erreurs.

Pour calculer les chiffres de contrôle, la ville a décidé d'utiliser une table d'opération. Une table d'opération est un tableau $10 \times 10$ de chiffres décimaux dont tous les éléments diagonaux valent $0$. Voici ci-dessous deux exemples de tables d'opération.

Table d'opération 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$

Table d'opération 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$

À l'aide d'une table d'opération, le chiffre de contrôle $e$ pour un numéro d'identification de base à quatre chiffres $abcd$ est calculé par la formule suivante. Ici, $i \otimes j$ désigne l'élément de la table situé à la ligne $i$ et à la colonne $j$.

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

Par exemple, en utilisant la Table d'opération 1, le chiffre de contrôle $e$ pour le numéro d'identification de base $abcd = 2016$ se calcule de la manière suivante.

$$\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}$$

Ainsi, le SSN est $20166$.

Notez que le chiffre de contrôle dépend de la table d'opération utilisée. Avec la Table d'opération 2, on obtient $e = 3$ pour le même numéro d'identification de base $2016$, et le SSN complet sera $20163$.

$$\begin{array}{c} \begin{aligned} 2016 & \\ \Downarrow & \; \text{+chiffre de contrôle avec la Table d'opération 2} \\ 20163 & \\ \Downarrow & \; \text{erreurs humaines} \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{Modification d'un seul chiffre}} \\[10pt] \overbrace{\mathbf{02}163 \quad 2\mathbf{10}63 \quad 20\mathbf{61}3 \quad 201\mathbf{36}}^{\text{Transposition de deux chiffres adjacents}} \end{array}} \end{array}$$

Figure B.1. Deux types d'erreurs humaines courantes

Le but de l'ajout du chiffre de contrôle est de détecter les erreurs humaines lors de l'écriture ou de la saisie des SSN. La fonction check suivante permet de détecter certaines erreurs humaines. Pour un nombre à cinq chiffres $abcde$, la fonction check est définie comme suit.

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

Cette fonction renvoie $0$ pour un SSN correct. En effet, chaque élément diagonal d'une table d'opération vaut $0$ et, pour un SSN correct, on a $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.$$

En revanche, une valeur non nulle renvoyée par check indique que le nombre donné ne peut pas être un SSN correct. Notez que, selon la table d'opération utilisée, la fonction check peut renvoyer $0$ pour un SSN incorrect. Les types d'erreurs détectées dépendent de la table d'opération utilisée ; c'est la table qui détermine la qualité de la détection d'erreurs.

Les autorités municipales souhaitent détecter deux types d'erreurs humaines courantes sur les suites de chiffres : la modification d'un seul chiffre et la transposition de deux chiffres adjacents, comme illustré à la Figure B.1.

Une table d'opération est dite bonne si elle permet de détecter toutes les erreurs courantes de ces deux types sur tous les SSN formés à partir des numéros d'identification de base à quatre chiffres 0000–9999. Notez que les erreurs portant sur le chiffre de contrôle, tout comme celles portant sur les quatre chiffres de l'identifiant de base, doivent être détectées. Par exemple, la Table d'opération 1 est bonne. La Table d'opération 2 n'est pas bonne car, pour $20613$, qui est un nombre obtenu en transposant les 3e et 4e chiffres d'un SSN correct $20163$, $\operatorname{check}(20613)$ vaut $0$. En réalité, parmi les $10000$ numéros d'identification de base, la Table d'opération 2 ne parvient pas à détecter une ou plusieurs erreurs courantes pour pas moins de $3439$ numéros d'identification de base.

Étant donné une table d'opération, déterminez sa qualité en comptant le nombre de numéros d'identification de base pour lesquels la table donnée ne parvient pas à détecter une ou plusieurs erreurs courantes.

Entrée

L'entrée est constituée d'un unique cas de test au format suivant.

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

L'entrée décrit une table d'opération où $x_{ij}$ est le chiffre décimal situé à la ligne $i$ et à la colonne $j$. Chaque ligne de l'entrée correspond à une ligne de la table, dans laquelle les éléments sont séparés par une seule espace. Les éléments diagonaux $x_{ii}$ ($i = 0, \ldots, 9$) valent toujours $0$.

Sortie

Affichez le nombre de numéros d'identification de base pour lesquels la table donnée ne parvient pas à détecter une ou plusieurs erreurs humaines courantes.

Exemples

Entrée 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

Sortie 1

0

Entrée 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

Sortie 2

3439

Entrée 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

Sortie 3

9995

Entrée 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

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