B2 - Zaboravljena partija
Vremensko ograničenje | Memorijsko ograničenje |
---|---|
1000ms | 512MB |
Pera i Mika vole da igraju uopšteni iks-oks, igru sa dva igrača sa sledećim pravilima:
- igra se na tabli sa \(N\) redova i \(N\) kolona,
- igrači igraju naizmenično,
- u svakom potezu, trenutni igrač obeležava jedno slobodno polje svojim simbolom: X za prvog igrača, odnosno O za drugog, i
- pobednik je onaj koji prvi napravi niz koji čini \(K\) uzastopnih simbola tog igrača (horizontalno, vertikalno ili dijagonalno). Ukoliko se tabla popuni, a ovaj uslov ne ispuni, rezultat partije je nerešen.
Pera i Mika se sećaju da su juče igrali odličnu partiju uopštenog iks-oksa, ali se ne sećaju kako je ta partija išla, osim da je jedan od njih dvojice pobedio i da je trajala tačno \(T\) poteza. Zanima ih kako bi ta partija mogla da izgleda, tako da od vas traže da im date jedan mogući primer, ili da im kažete da su nešto pogrešno upamtili i da takva partija ne može da postoji.
Opis ulaza
U prvom i jedinom redu standardnog ulaza nalaze se tri broja: \(N\), \(K\) i \(T\), koji redom predstavljaju dimenziju table na kojoj se igra uopšteni iks-oks, broj uzastopnih simbola potreban za pobedu, i broj poteza koji su Pera i Mika odigrali.
Opis izlaza
Ukoliko ne postoji partija koja se uklapa u podatke date na ulazu, u
jedinoj liniji izlaza ispisati nemoguce
.
U suprotnom, u prvih \(N\) redova ispisati po \(N\) karaktera, koji
predstavljaju stanje table nakon završetka partije, gde su X
i O
(velika slova) simboli prvog i drugog igrača, a .
prazno polje.
Između polja ne treba ispisati razmake.
U naredni red ispisati dva broja \(i\) i \(j\): red i kolonu polja na kojem je odigran poslednji potez (gde gornjem levom polju odgovaraju koordinate \((1, 1)\), tj. kolone se broje sa leva na desno, a redovi od gore na dole).
Ukoliko postoji više partija koje se uklapaju u date podatke, ispisati bilo koju.
Primer 1
Ulaz
Izlaz
Primer 2
Ulaz
Izlaz
Objašnjenje primera
Jedan mogući redosled polja na koja su Pera i Mika upisivali svoje simbole u prvoj partiji je \((1,1), (4,4), (1,3), (3,3), (1,2)\).
U drugom primeru, kako god da su Pera i Mika igrali, nakon trećeg
poteza bi postojala dva susedna polja sa simbolom X
, tako da bi prvi
igrač tada pobedio. Dakle, partija koja bi trajala četiri poteza ne
postoji.
Ograničenja
- \(2 \leq N \leq 100\)
- \(2 \leq K \leq N\)
- \(1 \leq T \leq N^2\)
Test primeri su podeljeni u 4 disjunktne grupe:
- U test primerima vrednim 20 poena: \(N = K = 3\).
- U test primerima vrednim 25 poena: \(K = 2\).
- U test primerima vrednim 25 poena: \(T \leq \frac{N^2}{4}\).
- U test primerima vrednim 30 poena: nema dodatnih ograničenja.
Autor | Tekst i test primeri | Analiza rеšenja | Testiranje |
---|---|---|---|
Dimitrije Erdeljan | Dimitrije Erdeljan | Dimitrije Erdeljan | Aleksandar Zlateski |
Za početak, treba odrediti da li je uopšte moguće generisati tablu
kakva se traži u zadatku. Ukoliko \(T < 2K-1\), očigledno nije, jer ni
jedan igrač neće stići da postavi \(K\) simbola neophodnih za pobedu. U
suprotnom, rešenje uvek postoji (što će biti jasno iz algoritma koji ga
generiše), osim ukoliko je \(K = 2\) i \(T > N \cdot \lceil \frac{N}{2}
\rceil + 1\). Da bi dokazali da u ovom slučaju nema rešenja, možemo
podeliti tablu na \(2 \times 2\) kvadrate i primetiti da pre poslednjeg
poteza u svakom od njih može biti najviše jedan X
i jedan O
.
Rešenje za proizvoljno \(T\) možemo napraviti od rešenja gde \(T = N^2\) (X
pobeđuje u poslednjem potezu), odnosno \(T = N \cdot \lceil \frac{N}{2}
\rceil + 1\) ako \(K = 2\), na sledeći način:
- ukoliko je \(T\) parno (
O
treba da pobedi), zamenimo sveX
saO
i obrnuto, - izračunamo koliko će
X
iO
biti na tabli posle \(T\) poteza, i - brišemo simbole dok ne ostane očekivan broj, vodeći računa da ne obrišemo nijedan iz niza od \(K\) uzastopnih zbog kog je jedan od igrača pobedio.
Ostaje samo da konstruišemo takvo rešenje. Ovo ćemo uraditi odvojeno za tri slučaja: \(K = 2\), \(K = 3\) i \(K > 3\)
\(K = 2\)
Tablu možemo popuniti na sledeći način (naizmenični X
i O
) u
svakom drugom redu (primer za \(N = 7\)):
Igrač koji igra poslednji potez igra na polje obeleženo sa *
.
\(K = 3\)
Počećemo od table na kojoj ni jedan igrač ne pobeđuje:
Primetimo da, ukoliko zamenimo polja \((1,1)\) i \((2,2)\) (obeležena malim
slovima), dobijamo tablu na kojoj X
pobeđuje u poslednjem potezu ako
"za kraj" ostavi \((2, 2)\).
\(K > 3\)
Slično kao za \(K = 3\), počećemo od table u kojoj niko ne pobeđuje, koju konstruišemo na sledeći način:
- U prvom redu imamo \(K-1\) simbola
X
, zatim jedanO
, pa opet \(K-1\)X
, i tako dalje. - Drugi red je isti, sa zamenjenim
X
iO
. - Dalje redove pravimo naizmeničnim ponavljanjem ova dva.
- Ukoliko je \(N\) neparno, da bi imali očekivani broj
X
iO
, poslednji red čine naizmeničniX
iO
.
Na primer, za \(N = 7, K = 4\):
Slično kao u prošlom slučaju, možemo zameniti prvi O
sa X
koji se
nalazi posle njega i dobiti poziciju u kojoj X
"čuva" potez \((1, K)\)
za kraj i pobeđuje u poslednjem potezu.
Ukoliko \(N = K\), ne možemo zameniti ova dva simbola (jer nema ničeg
desno od tog O
). U ovom slučaju, nije teško videti da umesto toga
možemo zameniti prvi O
sa poljem \((3, 1)\).
02_zaboravljena.cpp | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
|