Mistrzostwa Polski Szkół Średnich w Programowaniu Zespołowym 2024
Problem description
To zadanie jest interaktywne.
Pewnie wielu z was słyszało o grze Saper. W zadaniu mamy doczynienia z uproszczoną wersją tej gry. Twoim zadaniem jest oznakowanie pojedynczej bomby, która znajduje się na planszy o wymiarach 3 na 3. Aby to uczynić należy odkrywać pola niezawierające bomby. Każde takie pole zawiera informację o tym czy pole zawierające bombę znajduje się w otoczeniu odkrytego pola. Powiemy, że pole jest w otoczeniu innego pola, jeżeli stykają się one bokiem lub wierzchołkiem. Odkrycie bomby skutkuje porażką. Aby umożliwić Tobie skuteczne oznakowanie bomby, masz zagwarantowane, że bomba nie znajduje się w polu (1,1).
Protokół interakcji
Do komunikacji z programem sprawdzającym należy używać poniższych zapytań:
odkryj i j
– odkrywa pole w i–tym wierszu i j–tej kolumnie. Wiersze i kolumny numerujemy od jedynki. W przypadku próby odkrycia pola poza planszą; pola, które zostało już wcześniej odkryte lub pola, które zawiera bombę zostanie wypisane na wejście-1
. W tym przypadku należy zakończyć działanie programu. W przeciwnym wypadku na wejście zostanie wypisane1
, jeżeli w otoczeniu pola (i,j) znajduje się bomba lub0
w przeciwnym wypadku.bomba i j
– oznakowuje pole w i–tym wierszu i j–tej kolumnie. W przypadku poprawnego oznakowania test zostanie zaliczony, a w przeciwnym, zostanie zwrócony odpowiedni werdykt informujący o niepoprawnym oznaczeniu pola. W obu przypadkach należy zakończyć dalszą interakcję z programem.
Należy pamiętać o opróżnianiu bufora wypisywania po każdym
zapytaniu. Aby to uczynić należy wykonać
cout.flush();
lub cout << endl
jeżeli
używamy cin/cout w C++, fflush(stdout)
dla printf/scanf w
C++, sys.stdout.flush()
w Pythonie oraz
System.out.flush()
w Javie.
Przykładowa interakcja
Wejście | Wyjście | |
---|---|---|
odkryj 1 1 |
||
1 |
||
odkryj 3 3 |
||
1 |
||
bomba 2 2 |
Wyjaśnienie przykładu: Zapytanie o odkrycie pola
(1,1), dało nam informację, że bomba
znajduje się na którymś z pól: (1,2), (2,2), (2,1). Następne zapytanie
ujawnia, że bomba musi się na którymś z pól: (3,2), (2,2), (2,3). Zatem wiemy, że bomba
znajduje się na polu (2,2). Po
zapytaniu bomba 2 2
należy zakończyć interakcję z
programem.