QOJ.ac

QOJ

时间限制: 1 s 内存限制: 512 MB 总分: 100 难度: [显示] 可 Hack ✓

#174. Qualità delle cifre di controllo

统计

La piccola città in cui vivi prevede di introdurre un nuovo sistema di numeri di previdenza sociale (SSN). Ogni cittadino sarà identificato da un SSN a cinque cifre. Le prime quattro cifre indicano il numero ID di base (0000–9999) e l'ultima cifra è una cifra di controllo per rilevare gli errori.

Per calcolare le cifre di controllo, la città ha deciso di utilizzare una tabella di operazione. Una tabella di operazione è una tabella $10 \times 10$ di cifre decimali i cui elementi diagonali sono tutti $0$. Di seguito sono riportati due esempi di tabelle di operazione.

Tabella di operazione 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$

Tabella di operazione 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$

Utilizzando una tabella di operazione, la cifra di controllo $e$ per un numero ID di base a quattro cifre $abcd$ viene calcolata mediante la formula seguente. Qui, $i \otimes j$ indica l'elemento della tabella alla riga $i$ e alla colonna $j$.

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

Ad esempio, utilizzando la Tabella di operazione 1, la cifra di controllo $e$ per il numero ID di base $abcd = 2016$ si calcola nel modo seguente.

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

Pertanto, l'SSN è $20166$.

Si noti che la cifra di controllo dipende dalla tabella di operazione utilizzata. Con la Tabella di operazione 2 otteniamo $e = 3$ per lo stesso numero ID di base $2016$, e l'intero SSN sarà $20163$.

$$\begin{array}{c} \begin{aligned} 2016 & \\ \Downarrow & \; \text{+cifra di controllo usando la Tabella di operazione 2} \\ 20163 & \\ \Downarrow & \; \text{errori umani} \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{Alterazione di una singola cifra}} \\[10pt] \overbrace{\mathbf{02}163 \quad 2\mathbf{10}63 \quad 20\mathbf{61}3 \quad 201\mathbf{36}}^{\text{Trasposizione di due cifre adiacenti}} \end{array}} \end{array}$$

Figura B.1. Due tipi di errori umani comuni

Lo scopo dell'aggiunta della cifra di controllo è rilevare errori umani durante la scrittura o la digitazione degli SSN. La seguente funzione check può rilevare determinati errori umani. Per un numero a cinque cifre $abcde$, la funzione check è definita come segue.

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

Questa funzione restituisce $0$ per un SSN corretto. Ciò avviene perché ogni elemento diagonale di una tabella di operazione è $0$ e, per un SSN corretto, vale $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.$$

D'altra parte, un valore diverso da zero restituito da check indica che il numero fornito non può essere un SSN corretto. Si noti che, a seconda della tabella di operazione utilizzata, la funzione check può restituire $0$ anche per un SSN errato. I tipi di errori rilevati dipendono dalla tabella di operazione usata; la tabella determina la qualità del rilevamento degli errori.

Le autorità cittadine vogliono rilevare due tipi di errori umani comuni sulle sequenze di cifre: l'alterazione di una singola cifra e la trasposizione di due cifre adiacenti, come mostrato nella Figura B.1.

Una tabella di operazione è buona se è in grado di rilevare tutti gli errori comuni dei due tipi su tutti gli SSN formati dai numeri ID di base a quattro cifre 0000–9999. Si noti che devono essere rilevati sia gli errori sulla cifra di controllo sia quelli sulle quattro cifre dell'ID di base. Ad esempio, la Tabella di operazione 1 è buona. La Tabella di operazione 2 non è buona perché, per $20613$, che è il numero ottenuto trasponendo la 3ª e la 4ª cifra di un SSN corretto $20163$, $\operatorname{check}(20613)$ vale $0$. In effetti, tra i $10000$ numeri ID di base, la Tabella di operazione 2 non riesce a rilevare uno o più errori comuni per ben $3439$ numeri ID di base.

Data una tabella di operazione, stabilisci quanto sia buona contando il numero di numeri ID di base per i quali la tabella data non riesce a rilevare uno o più errori comuni.

Input

L'input è costituito da un singolo caso di test nel formato seguente.

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

L'input descrive una tabella di operazione in cui $x_{ij}$ è la cifra decimale alla riga $i$ e alla colonna $j$. Ogni riga dell'input corrisponde a una riga della tabella, in cui gli elementi sono separati da un singolo spazio. Gli elementi diagonali $x_{ii}$ ($i = 0, \ldots, 9$) sono sempre $0$.

Output

Stampa il numero di numeri ID di base per i quali la tabella data non riesce a rilevare uno o più errori umani comuni.

Esempi

Input 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

Output 1

0

Input 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

Output 2

3439

Input 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

Output 3

9995

Input 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

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