Problem hidden
|This problem was hidden by Editorial Board member probably because it has incorrect language|version or invalid test data, or description of the problem is not clear.|

AL_26_13 - Saper

Saper


Gra saper

Sprawdź, czy istnieje takie pole diagramu, z którego rozpoczynając, można doprowadzić grę do szczęśliwego jej zakończenia wyłącznie przy pomocy dedukcji.

Twoim zadaniem jest przeprowadzić symulację gry i odpowiedzieć na pytanie postawione wyżej. Na wejściu jako pojedynczy przypadek testowy otrzymasz prostokątny diagram o wymiarach n × m opisany za pomocą dwóch znaków. Znak kropki oznacza wolne pole, a znak x, to pole minowe. Podany diagram służyć ma jako mapa terenu. Program powinien wczytać ją, wyznaczyć pola liczbowe oraz obszary wolne od liczb i trzymać tak zmodyfikowaną mapę w pamięci. Następnie należy sprawdzić, czy startując z pewnego pola diagramu nie należącego do miny, za pomocą dedukcji, można odkryć wszystkie pola nie będące minami.

Wejście
W pierwszym wierszu wejścia znajduje się liczba całkowita d (1 ≤ d ≤ 100) oznaczająca liczbę przypadków testowych. Każdy przypadek opisują w pierwszym wierszu trzy liczby całkowite n, m, k (2 ≤ n ≤ 16, 2 ≤ m ≤ 30, 1 ≤ k < n × m) oznaczające kolejno liczbę wierszy i liczbę kolumn diagramu oraz liczbę min. Dalej znajduje się n wierszy, każdy po m znaków, przedstawiające diagram sapera.

Wyjście
Dla każdego przypadku testowego należy wypisać TAK albo NIE jako odpowiedź na postawione pytanie.

Przykład

Wejście
3
3 3 3
...
.xx
.x.
5 5 4
....x
x....
....x
....x
.....
4 7 4
.......
xx...xx
.......
.......

Wyjście
TAK
NIE
TAK

 

Analiza drugiego przypadku testowego.

5 5 4
....x
x....
....x
....x
.....

Mapa:
11 1x
x1 22
11 2x
   2x
   11

Rozpoczynamy od pustego diagramu.
.....
.....
.....
.....
.....

Jeśli rozpoczniemy np. z pola (1,3) to na podstawie mapy otrzymamy:
.1 1.
.1 2.
11 2.
   2.
   1.

Na lewej bandzie mamy prostą sytuację, z której wnioskujemy, że pole (2,1)
to mina, a pole (1,1) jest wolne. Modyfikujemy diagram zaznaczając minę i
odkrywając pole wolne. Otrzymujemy:
11 1.
x1 2.
11 2.
   2.
   1.

Po prawej stronie diagramu sytuacja jest bardziej złożona. Po poprawnie
przeprowadzonym rozumowaniu możemy być pewni, że pole (3,5) to pole minowe.
Oznaczamy je i otrzymujemy:
11 1.
x1 2.
11 2x
   2.
   1.

Pozostały cztery pola do odkrycia, wśród których są dwie miny. Mamy tu dwie
kombinacje, ale nie dają nam one pewności odkrycia pola nie będącego miną.
Rozpoczynając od nowa z dowolnego innego pola dotrzemy co najwyżej do ostatnio
przedstawionej sytuacji, która nie gwarantuje nam bezpiecznego ukończenia gry.
Odpowiedzą dla tego diagramu jest zatem NIE.

Dodane przez:Mariusz Śliwiński
Data dodania:2015-12-23
Limit czasu wykonania programu:1s-5s
Limit długości kodu źródłowego50000B
Limit pamięci:1536MB
Cluster: Cube (Intel G860)
Języki programowania:All except: ASM64 GOSU JS-MONKEY

ukryj komentarze
2015-12-27 13:35:30 Mariusz ¦liwiñski
Odpowiedzią jest TAK.

Przeniosłem co trudniejsze przypadki do ostatnich plików. Postaram się zaraz poszukać kolejny test.
2015-12-27 13:12:14 Bartek
Odpowiedzią jest TAK.
Tak rozwiązał to mój program wybierając najpierw pole jakieś z samego dołu: http://wklej.org/hash/61973c4255d/
Liczby nie oznaczają tutaj ile min jest wokół, ale ile min wokół należy jeszcze odkryć.
2015-12-27 12:47:27 Mariusz ¦liwiñski
Dobrze rozumujesz:

Trudniejszy przypadek:
6 25 29
x.x.x.x.x.x.x.x.x.x.x.x.x
.........................
.........................
.xx xx.xx.xx.xx.xx.xx.xx.
.........................
.........................
2015-12-27 12:24:28 Bartek
Wydaje mi się, że w tym wypadku da się rozwiązać tą planszę. Plansza ogólnie wygląda tak:
001x2
0123x
01x21
01110
Niech pierwszy ruch będzie na polu z liczbą 3.
.....
...3.
.....
.....
Jako, że mamy tylko 3 miny to wiemy, że wszystkie miny muszą znajdować się wokół tej odkrytej liczby. To umożliwia nam odkrycie wielu pól i uzyskanie takiej planszy:
00...
01.3.
01...
01110
I stąd już wszystko robi się bardzo proste. Wiemy gdzie jest jedna z min więc możemy odkryć kolejne pola.
00...
01.3.
01x..
01110

001..
0123.
01x21
01110

I teraz mamy już tylko jedną możliwość ułożenia dwóch pozostałych min tak, żeby wszystko się zgadzało.

Czy pomyliłem się gdzieś ?
2015-12-27 12:09:08 Mariusz ¦liwiñski
Kolejny przykład, też jeszcze nietrudny :)

4 5 3
...x.
....x
..x..
.....

ostatecznie mamy sytuację, w której dwie kombinacje pasują:
1..
12..
1x21
111
2015-12-27 12:04:38 Bartek
Mhm. Mój program jest w stanie to wszystko wywnioskować i zwraca poprawny wynik dla tego testu (btw. poprzednie programy też zwracały poprawne wyniki, ale były w stanie dojść tylko do 1 kroku) ale nadal dostaję WA ;(
2015-12-27 11:36:06 Mariusz ¦liwiñski
Zgadza się, NIE, bo mamy symetryczny przypadek:

5 5 2
.x...
.....
.....
.x...
.....

dla którego otrzymujemy takie odkrycie z dowolnego punktu po prawej stronie:

..1
..1
..1
..1
..1

i co najdalej możemy dotrzeć do takiej sytuacji:

1?1
1?1
111
1?1
1?1

Ostatnio edytowany: 2015-12-27 11:43:46
2015-12-27 11:35:12 Bartek
Dla tego testu wynikiem ma być NIE ?
2015-12-27 11:08:51 Mariusz ¦liwiñski
Taki nietrudny przypadek:

5 5 2
.....
.x...
.....
.....
.x...
2015-12-27 10:58:36 Mariusz ¦liwiñski
Zgadza się, NIE
© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.