QOJ.ac

QOJ

حد الوقت: 1 s حد الذاكرة: 512 MB مجموع النقاط: 100 الصعوبة: [عرض] قابلة للهجوم ✓

#174. Бақылау цифрларының сапасы

الإحصائيات

Сіз тұратын шағын қала әлеуметтік сақтандыру нөмірлерінің (SSN) жаңа жүйесін енгізуді жоспарлап отыр. Әрбір азамат бес таңбалы SSN арқылы сәйкестендіріледі. Оның алғашқы төрт цифры базалық ID нөмірін (0000–9999) білдіреді, ал соңғы бір цифры — қателерді анықтауға арналған бақылау цифры.

Бақылау цифрларын есептеу үшін қала билігі амал кестесін қолдануды ұйғарды. Амал кестесі — диагональдық элементтерінің барлығы $0$-ге тең ондық цифрлардан тұратын $10 \times 10$ өлшемді кесте. Төменде амал кестесінің екі мысалы келтірілген.

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$

Амал кестесін пайдалана отырып, төрт таңбалы $abcd$ базалық ID нөмірі үшін $e$ бақылау цифры келесі формула бойынша есептеледі. Мұндағы $i \otimes j$ кестенің $i$-жолы мен $j$-бағанындағы элементін білдіреді.

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

Мысалы, 1-амал кестесін қолданғанда $abcd = 2016$ базалық ID нөмірі үшін $e$ бақылау цифры келесі түрде есептеледі.

$$\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$ базалық ID нөмірі үшін $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 функциясы қате SSN үшін де $0$ қайтаруы мүмкін екенін ескеріңіз. Қателердің қандай түрлері анықталатыны қолданылатын амал кестесіне байланысты; кесте қателерді анықтау сапасын айқындайды.

Қала әкімшілігі цифрлар тізбегінде жиі кездесетін адами қателердің екі түрін анықтағысы келеді: B.1-суретте көрсетілгендей, бір ғана цифрды өзгерту және көршілес екі цифрдың орнын ауыстыру.

Егер амал кестесі төрт таңбалы 0000–9999 базалық ID нөмірлерінен құралған барлық SSN нөмірлерінде осы екі түрдегі жиі кездесетін қателердің барлығын анықтай алса, ол жақсы деп аталады. Базалық ID-дің төрт цифрындағы қателер сияқты, бақылау цифрындағы қателер де анықталуы тиіс екеніне назар аударыңыз. Мысалы, 1-амал кестесі жақсы. Ал 2-амал кестесі жақсы емес, өйткені дұрыс $20163$ SSN нөмірінің 3-ші және 4-ші цифрларының орнын ауыстыру арқылы алынған $20613$ саны үшін $\operatorname{check}(20613)$ мәні $0$-ге тең. Іс жүзінде, $10000$ базалық ID нөмірінің ішінде 2-амал кестесі бақандай $3439$ базалық ID нөмірі үшін бір немесе бірнеше жиі кездесетін қатені анықтай алмайды.

Берілген амал кестесі үшін оның бір немесе бірнеше жиі кездесетін қатені анықтай алмайтын базалық ID нөмірлерінің санын есептеу арқылы оның қаншалықты жақсы екенін анықтаңыз.

Кіріс деректері

Кіріс деректері келесі форматтағы бір тест жағдайынан тұрады.

$$\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$-ге тең.

Шығыс деректері

Берілген кесте бір немесе бірнеше жиі кездесетін адами қатені анықтай алмайтын базалық ID нөмірлерінің санын шығарыңыз.

Мысалдар

Кіріс деректері 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.