A3 - Kontra-žmurke
Vremensko ograničenje | Memorijsko ograničenje |
---|---|
1000ms | 64MB |
Članovi Tajne komisije u senci su prilično besposleni ovih dana pa u obližnjem parku igraju kontra-žmurke. Kontra-žmurke su potezna dečja igra u kojoj se jedan igrač krije dok ga jedan ili više igrača, koje nazivamo tragačima, traži.
Park je pravougaonih dimenzija i podeljen je na jedinične kvadrate. Svako kvadratno polje predstavlja ili prohodni žbun ili neprohodno drvo. Za svakog tragača je poznata njegova početna pozicija kao i brzina koja predstavlja koliko polja može preći u jednom potezu. Sa trenutnog polja tragač može preći samo na neko od četiri susedna polja. Dva polja su susedna ukoliko imaju zajedničku stranicu. Svi tragači u isto vreme kreću sa potragom.
Red je na malog Zokija da se sakrije. On želi da bude što bolji u ovoj igri pa želi da se sakrije u žbunu na polju čija je skrivenost najveća moguća. Skrivenost nekog polja je celobrojna vrednost koja predstavlja u koliko najmanje poteza neki od tragača može stići do tog polja krećući se najkraćim putem. Pomozite Zokiju da pronađe polje sa najvećom skrivenošću jer su tragači već počeli sa odbrojavanjem.
Opis ulaza
U prvom redu standardnog ulaza nalaze se dva prirodna broja \(N\) i \(M\), koji predstavljaju dimenzije parka. Svaki od narednih \(N\) redova sadrži niz od \(M\) cifara iz skupa \(\{0, 1\}\) bez razmaka – izgled parka. \(0\) označava da se na odgovarajućem mestu nalazi žbun, a \(1\) drvo. Zatim sledi broj tragača \(K\) i u narednih \(K\) redova koordinate početne pozicije \(X_i\) i \(Y_i\) (redni broj reda i kolone) i brzina \(V_i\) za svakog od njih. Redovi su numerisani od \(1\) do \(N\) odozgo nadole a kolone od \(1\) do \(M\) sleva nadesno.
Opis izlaza
U prvom i jedinom redu standardnog izlaza ispisati dva broja \(i\) i \(j\) – redni broj reda i kolone polja na kojem se Zoki treba sakriti u skladu sa svojim zahtevom. Ukoliko postoji više rešenja ispisati bilo koje.
Primer 1
Ulaz
Izlaz
Objašnjenje primera
Slika 1 Slika 2 Slika 3
10X3344 67X3456 10X3344
1X23334 5X32345 1X22334
1222XX4 4321XX4 1221XX4
2223334 3210123 2210123
2233344 4321234 2221234
Na datim slikama neprohodna polja označena su X-om. Slike 1 i 2 predstavljaju koliko najmanje poteza je potrebno prvom i drugom tragaču da dođu do odgovarajućih polja u parku, tim redom. Na slici 3 vidimo skrivenost svakog polja. Primetimo da je najveća skrivenost nekog polja jednaka 4 i da ukupno takvih polja ima 5. Bilo koje od tih polja je rešenje.
Ograničenja
- \(1\leq N,M \leq 1,000\)
- \(1\leq K\leq 1,000,000\)
- \(1\leq V_i\leq 10^9\)
- U parku će biti prohodnog puta od svakog do svakog žbuna.
- Nikoja dva tragača neće imati iste koordinate.
- Početne pozicije tragača će biti na polju sa žbunom.
Napomena
Test primeri su podeljeni u 4 disjuntkne grupe:
- U test primerima vrednim 20 poena važi da su brzine svih tragača jednake.
- U test primerima vrednim 20 poena važi \(1\leq N,M\leq 400\), \(1\leq V_i\leq 400\).
- U test primerima vrednim 20 poena važi \(1\leq K\leq 1,000\) i sva polja su prohodna.
- U test primerima vrednim 40 poena nema dodatnih ograničenja.
Autor | Tekst i test primeri | Analiza rеšenja | Testiranje |
---|---|---|---|
Dimitrije Dimić | Dimitrije Dimić | Aleksandar Višnjić | Ivan Stošić |
Prvi podzadatak:
Dat je lavirint predstavljen matricom. Skrivenost polja u ovom podzadatku jednaka je udaljenosti od najbližeg tragača. Te udaljenosti tražimo primenom pretrage u širinu. Potrebno je postaviti više izvora - u svakom tragaču. Složenost je \(O(NM)\).
Drugi podzadatak:
U ovom podzadatku moguće je implementirati odvojeni algoritam pretrage u širinu za svakog tragača nezavisno. Napomenimo da tragače koji imaju istu brzinu smatarmo istim - slično kao i ranije, za svakog takvog postavljamo više izvora. Simuliramo svaki trenutak vremena, i u njemu za svakog tragača odredimo najveću "dubinu" do koje može stići. Te dubine ažuriramo standardno u algoritmu pretrage. Potrebno je pronaći poslednji trenutak u kome postoji slobodno polje. On je brojno jednak skrivenosti. Direktna implementacija navedenog daje rešenje složenosti \(O(NMV)\), gde \(V\) predstavlja najveću brzinu nekog tragača.
Treći podzadatak:
Koristimo prethodnu ideju za posmatranje trenutaka. Primetimo da ako u nekom trenutku \(T\) postoji skriveno polje, onda postoji i u trenutku \(T-1\). Dok ako u trenutku \(T\) ne postoji, onda ne postoji ni u \(T+1\). Odavde zaključujemo da su trenuci binarno pretraživi, tj. koristićemo binarnu pretragu po vrednosti rešenja. Tačnije, ako je skrivenost \(S\) moguća, za svakog tragača \(i\) znamo da pokriva sva polja na udaljenosti \(S\cdot V_i\) i da nakon toga ostaje bar jedno slobodno polje (i njega je potrebno ispisati za najveću skrivenost). Ako ne ostaje slobodno polje, tražena skrivenost nije moguća. Proveru da li ono postoji radimo pretragom u širini, ali ne preko reda nego preko niza vektora: za svaku "dubinu" pamtimo sva polja koja se nalaze na njoj. Susedna polja koja nisu posećena u sledećem koraku imaju dubinu za jednu manju od trenutne. Najmanja moguća dubina posećenog polja je \(0\). Izvori imaju koordinate \((X_i,Y_i)\) i dubinu \(S\cdot V_i\).
Složenost ovog rešenja je \(O((NM+K)\log (NM)\).
Glavno rešenje:
Rešenje se suštinski ne razlikuje od prethodnog. Potrebno je uračunati blokirana polja, i eventualno optimizovati rešenje. Složenost je \(O((NM+K)\log (NM)\).
06_kontra_zmurke.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 142 143 144 145 146 147 148 149 150 |
|