Zgłaszanie | Wszystkie zgłoszenia | Najlepsze | Lista |
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łowego | 50000B |
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 |