Perfekts labirints

vidēji grūts
Latvijas Informātikas olimpiādes logo
Uzdevums no Latvijas 38. (2024./2025. m.g.) informātikas olimpiādes (LIO) valsts kārtas; jaunākajai (8.-10. klašu) grupai.

Stāsts

Tavs draugs veido labirintus, un viņa mērķis ir izveidot perfektu labirintu. Tā kā šāda labirinta izveide nebūt nav vienkārša, viņš lūdz Tavu palīdzību.

Ir zināms, ka perfekts labirints atbilst šādiem nosacījumiem:

  • Labirints ir rūtiņu laukums ar NN rindām (numurētas virzienā no augšas uz leju ar naturāliem skaitļiem pēc kārtas no 11 līdz NN ) un MM kolonnām (numurētas no kreisās uz labo pusi ar naturāliem skaitļiem pēc kārtas no 11 līdz MM). Rūtiņa ar koordinātām (x,y)(x, y) atbilst rūtiņai laukuma xx kolonnā un yy rindā.
  • Katra rūtiņa ir vai nu tukša (caur to var iziet) vai aizpildīta (caur to iziet nevar).
  • Visas rūtiņas ar koordinātām (x,y)(x, y), kur xx un yy abi ir nepāra skaitļi, ir tukšas.
  • Visas rūtiņas ar koordinātām (x,y)(x, y), kur xx un yy abi ir pāra skaitļi, ir aizpildītas.
  • Labirintā divas tukšas blakus esošas rūtiņas sauc par savienotām, ja tām ir kopīga mala - t.i., viena koordināta sakrīt, bet otra - atšķiras par 11.
  • Labirintā aizpildītās rūtiņas ir izvietotas tā, ka no katras tukšās rūtiņas eksistē tieši viens ceļš uz katru citu tukšo rūtiņu, izmantojot savienotās rūtiņas.

Tavs draugs labirintā ir izvēlējies KK rūtiņas, kurām noteikti jābūt aizpildītām.

Tavs uzdevums ir uzrakstīt datorprogrammu, kas izveido perfektu labirintu, ievērojot visus dotos nosacījumus un drauga izvēlētās KK aizpildītās rūtiņas, vai paziņo, ka šādu labirintu izveidot nav iespējams.

Ievaddati

Pirmajā rindā doti ar tukšumzīmēm atdalīti veseli skaitļi NN, MM, KK (1N21031 \leq N \leq 2 \cdot 10^3, 1M21031 \leq M \leq 2 \cdot 10^3, 0KNM0 \leq K \leq N \cdot M).

Tālāk seko KK rindas, kur katram ii (1iK1 \leq i \leq K) ii-tajā rindā ir dotas vienas Tava drauga izvēlētās aizpildītās rūtiņas koordinātas - divi ar tukšumzīmi atdalīti naturāli skaitļi xix_i un yiy_i (1xiM1 \leq x_i \leq M un 1yiN1 \leq y_i \leq N).

Izvaddati

Izvaddatu pirmajā rindā jāizvada VAR vai NEVAR atbilstoši tam, vai perfektu labirintu ir iespējams izveidot, vai nav.

Ja labirintu var izveidot, tad nākamajās rindās jāizvada perfekta labirinta apraksts, kur tukšās rūtiņas apzīmē ar ".", drauga izvēlētās aizpildītās rūtiņas - ar "@" un parējās aizpildītās rūtiņas - ar "#". Ja iespējams izveidot vairākus perfektus labirintus, jāizvada jebkura no tiem apraksts.

Piemēri

Ievaddati

4 5 2 4 2 2 4 Kopēt kodu

Izvaddati

VAR .#... .#.@# ..... .@.#. Kopēt kodu

Piezīme:

Tavs draugs vēlas izveidot perfektu labirintu, kur $N = 4, M = 5$, un ir izvēlējies divas aizpildītas rūtiņas $(4, 2)$ un $(2, 4)$. Sākuma konfigurācija:

Ievaddati

3 4 3 2 1 2 2 2 3 Kopēt kodu

Izvaddati

NEVAR Kopēt kodu

Piezīme:

Tavs draugs vēlas izveidot perfektu labirintu, kur $N = 3, M = 4$, un ir izvēlējies trīs aizpildītas rūtiņas $(2, 1)$, $(2, 2)$ un $(2, 3)$. Sākuma konfigurācija:

Ievaddati

3 5 3 5 2 2 3 1 3 Kopēt kodu

Izvaddati

NEVAR Kopēt kodu

Piezīme:

Tavs draugs vēlas izveidot perfektu labirintu, kur $N = 3, M = 5$, un ir izvēlējies trīs aizpildītas rūtiņas $(5, 2)$, $(2, 3)$ un $(1, 3)$. Sākuma konfigurācija:

Izpildes resursu ierobežojumi

CPU izpildes laiks uz testu: 1.3 sekundes.
RAM atmiņas apjoms uz testu: 256 megabaiti.

Apakšuzdevumi un to vērtēšana

#Apakšuzdevuma aprakstsPunkti
1.

Uzdevuma tekstā dotie testi

2
2.

N5N \leq 5 un M5M \leq 5

6
3.

N=3N = 3

8
4.

K10K \leq 10

12
5.

Lai tiktu izveidots labirints, nepieciešams aizpildīt vienu rūtiņu

10
6.

Lai tiktu izveidots labirints, nepieciešams aizpildīt ne vairāk kā 10001000 rūtiņas

16
7.

Bez papildu ierobežojumiem

46
Apakšuzdevumu punktu summa = 100.

1. apakšuzdevuma ievaddati

7 7 10 4 4 4 2 6 1 4 3 4 6 7 6 3 4 6 5 6 4 2 6 Kopēt kodu
5 15 15 2 2 2 3 9 4 8 3 14 2 5 4 6 4 14 3 6 3 6 2 4 2 1 4 10 2 8 4 12 4 Kopēt kodu
11 11 25 2 10 7 8 8 6 8 10 7 6 4 3 8 4 2 9 11 10 2 2 4 2 11 6 5 6 9 6 10 7 2 3 4 6 2 6 2 4 6 6 6 2 6 3 3 4 10 10 5 2 Kopēt kodu