QOJ.ac

QOJ

시간 제한: 1 s 메모리 제한: 512 MB 총점: 100 난이도: [표시] 해킹 가능 ✓

#174. Gæði vartalna

통계

Litla borgin þar sem þú býrð áformar að taka upp nýtt kennitölukerfi almannatrygginga (SSN). Hver borgari verður auðkenndur með fimm stafa SSN-númeri. Fyrstu fjórir tölustafirnir gefa til kynna grunn-ID-númerið (0000–9999) og síðasti tölustafurinn er vartala til að greina villur.

Til að reikna út vartölur hefur borgin ákveðið að nota aðgerðatöflu. Aðgerðatafla er $10 \times 10$ tafla af tugakerfistölustöfum þar sem öll hornalínustökin eru $0$. Hér að neðan eru tvö dæmi um aðgerðatöflur.

Aðgerðatafla 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$

Aðgerðatafla 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$

Með aðgerðatöflu er vartalan $e$ fyrir fjögurra stafa grunn-ID-númer $abcd$ reiknuð með eftirfarandi formúlu. Hér táknar $i \otimes j$ stakið í töflunni í línu $i$ og dálki $j$.

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

Til dæmis, ef notuð er Aðgerðatafla 1, er vartalan $e$ fyrir grunn-ID-númerið $abcd = 2016$ reiknuð á eftirfarandi hátt.

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

Þannig er SSN-númerið $20166$.

Athugið að vartalan fer eftir því hvaða aðgerðatafla er notuð. Með Aðgerðatöflu 2 fæst $e = 3$ fyrir sama grunn-ID-númer $2016$, og SSN-númerið í heild verður $20163$.

$$\begin{array}{c} \begin{aligned} 2016 & \\ \Downarrow & \; \text{+vartala með Aðgerðatöflu 2} \\ 20163 & \\ \Downarrow & \; \text{mannleg mistök} \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{Breyting á einum tölustaf}} \\[10pt] \overbrace{\mathbf{02}163 \quad 2\mathbf{10}63 \quad 20\mathbf{61}3 \quad 201\mathbf{36}}^{\text{Víxlun tveggja samliggjandi tölustafa}} \end{array}} \end{array}$$

Mynd B.1. Tvær tegundir algengra mannlegra mistaka

Tilgangurinn með því að bæta við vartölunni er að greina mannleg mistök við skrif eða innslátt á SSN-númerum. Eftirfarandi fall check getur greint ákveðin mannleg mistök. Fyrir fimm stafa tölu $abcde$ er fallið check skilgreint sem hér segir.

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

Þetta fall skilar $0$ fyrir rétt SSN-númer. Það er vegna þess að hvert hornalínustak í aðgerðatöflu er $0$ og fyrir rétt SSN-númer gildir $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.$$

Á hinn bóginn gefur gildi frábrugðið núlli frá check til kynna að gefna talan geti ekki verið rétt SSN-númer. Athugið að eftir því hvaða aðgerðatafla er notuð getur fallið check einnig skilað $0$ fyrir rangt SSN-númer. Hvaða tegundir mistaka greinast fer eftir aðgerðatöflunni sem notuð er; taflan ræður gæðum villugreiningarinnar.

Borgaryfirvöld vilja greina tvær tegundir algengra mannlegra mistaka í runum tölustafa: að breyta einum einstökum tölustaf og að víxla tveimur samliggjandi tölustöfum, eins og sýnt er á Mynd B.1.

Aðgerðatafla er góð ef hún getur greint öll algeng mistök af báðum þessum tegundum í öllum SSN-númerum sem mynduð eru úr fjögurra stafa grunn-ID-númerunum 0000–9999. Athugið að greina þarf mistök í vartölunni jafnt sem í grunn-ID-tölustöfunum fjórum. Til dæmis er Aðgerðatafla 1 góð. Aðgerðatafla 2 er ekki góð vegna þess að fyrir $20613$, sem fæst með því að víxla 3. og 4. tölustaf rétts SSN-númers $20163$, er $\operatorname{check}(20613)$ jafnt og $0$. Raunar getur Aðgerðatafla 2, af $10000$ grunn-ID-númerum, ekki greint eitt eða fleiri algeng mistök fyrir allt að $3439$ grunn-ID-númer.

Fyrir gefna aðgerðatöflu skal ákvarða hversu góð hún er með því að telja fjölda grunn-ID-númera sem gefna taflan getur ekki greint eitt eða fleiri algeng mistök fyrir.

Inntak

Inntakið samanstendur af einu prófunartilviki á eftirfarandi sniði.

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

Inntakið lýsir aðgerðatöflu þar sem $x_{ij}$ er tugakerfistölustafurinn í línu $i$ og dálki $j$. Hver lína í inntakinu samsvarar einni línu í töflunni, þar sem stökin eru aðskilin með einu bili. Hornalínustökin $x_{ii}$ ($i = 0, \ldots, 9$) eru alltaf $0$.

Úttak

Skrifið út fjölda grunn-ID-númera sem gefna taflan getur ekki greint eitt eða fleiri algeng mannleg mistök fyrir.

Dæmi

Inntak 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

Úttak 1

0

Inntak 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

Úttak 2

3439

Inntak 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

Úttak 3

9995

Inntak 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

Úttak 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.