Linesweeper | 프로그래밍의 벗 PivotOJ
PivotOJ

Linesweeper

시간 제한: 4000ms메모리 제한: 1024MB출처: EIO 2020-21 prelimBOJ 29899
이 문제는 본문 이미지 일부가 표시되지 않습니다. 텍스트만으로 풀이가 어려울 수 있습니다.

문제

Juku arvutiekraan on lõpmata lai, aga vaid 2 cm kõrge. On mõistetav, et sellise ekraaniga on paljusid arvutimänge väga ebamugav mängida. Kõiketeadev jõuluvana toob Jukule tema arvutiga sobivaid mänge. Üks selline on Linesweeper.

Linesweeperi mängulaud koosneb kahe rea ja lõpmatu arvu veergudega tabelist; tabeli veerud on nummerdatud täisarvudega. Alumise rea ruutudes võivad olla miinid; miinide asukohad ei ole teada. Ülemise rea igas ruudus on kirjas täisarv, mis näitab, mitu miini selle ruudu naaberruutudes asub. Kaks ruutu on naaberruudud, kui neil on ühine nurk või serv. Mängija ülesandeks on leida, millistes ruutudes on miinid.

Lohaka programmeerimise tulemusena on sellel mängul mõned omapärased vead:

  • Esimene mäng on alati selline, kus ülemisel real on ainult nullid.
  • Igas mängus erineb ülemine rida eelmise ülemisest reast täpselt ühe ruudu võrra.
  • On võimalik, et mängijale näidatakse sellist ülemist rida, millele vastavat alumist rida tegelikult üldse olemas olla ei saa.

Juku on selles mängus üsna osav --- ta suudab enamasti miinide asukohad ise selgeks teha, aga vahel vajab veidi abi vihjete näol. Juku küsib alati vihjet kujul "kas ruudul ii on miin?". Märgime, et sellele küsimusele on neli erinevat võimalikku vastust:

  • sellisele ülemisele reale vastavat alumist rida ei saa olla (tähis !);
  • saab näidata, et selles ruudus kindlasti on miin (tähis x);
  • saab näidata, et selles ruudus miini kindlasti ei ole (tähis o);
  • on võimalik, et selles ruudus on miin ja võimalik, et ei ole (tähis ?).

Jukule vihjete andmine on aga tüütu ja seda tööd võiks teha programm.

Formaalselt antakse meile QQ päringut, mis võivad olla kahest tüübist:

  1. Antud ii ja cc. Juku alustab uut mängu, mis erineb eelmisest ainult selle poolest, et ülemise rea ii-ndas ruudus on nüüd arv cc.
  2. Antud ii. Juku küsib, kas alumise rea ii-ndas ruudus on miin.

Kirjutada programm, mis nendele päringutele vastab.

입력

Sisendi esimesel real on täisarv QQ (1Q21051 \le Q \le 2 \cdot 10^5).

Järgneb QQ rida, millest igaüks kirjeldab ühte päringut. Rida on kas kujul 1 i c (1i1051 \le i \le 10^5, 0c30 \le c \le 3) või 2 i (1i1051 \le i \le 10^5), kirjeldades vastavalt esimest või teist tüüpi päringut.

출력

Iga sisendis antud teist tüüpi päringule tuleb vastata eraldi reale ühega sümbolitest x, o, !, ?.

힌트

Esimeses näites jääb Juku esimest korda hätta järgmise mängu korral:

[이미지 1]

Saab näidata, et alumisel real toodu on ainus võimalik miinide paigutus.

Kolmandas näites jääb Juku hätta juba esimesel mängul, kus ülemine rida koosneb ainult nullidest. On selge, et sel juhul ei saa ühelgi ruudul olla miini --- seega ei ole miini ka ruudul 44.

Hätta jääb ta samas näites ka järgmisel mängul. Siin erineb mängulaud eelmisest ainult selle võrra, et ruudul numbriga 3 on nüüd kirjas arv 1:

[이미지 2]

Sellele ülemisele reale vastavat miinide paigutust ehk alumist rida olla ei saa. Tõepoolest, kui ühes ruudu 3 naaberruutudest oleks miin, siis oleks ka ruudus 2 või 4 nullist erinev arv. Juku küsib selle mängu kohta vihjet kaks korda: vastavalt ülalolevale on mõlema vastus !.

Kaks mängu hiljem jääb ta uuesti hätta. Nüüd on mängulaud selline:

[이미지 3]

Jälle saab näidata, et alumisel real toodud paigutus on ainus võimalik. Seega on ruudul 3 kindlasti miin ja ruudul 91191 kindlasti miini pole.

Kuna teises näites on mõned esimest tüüpi päringud pärast mõnesid teist tüüpi päringuid, siis see test ei saa esineda esimeses testigrupis.

Kuna kolmandas näites on mõne päringu vastus !, siis see test ei saa esineda esimeses ega teises testigrupis.

예제

예제 1

입력
12
1 1 1
1 2 2
1 3 2
1 4 2
1 5 1
1 6 1
2 1
2 2
2 3
2 4
2 5
2 6
출력
o
x
x
o
x
o

예제 2

입력
14
1 1 1
1 5 1
1 2 2
1 4 2
1 3 3
2 2
2 3
2 4
1 2 1
1 4 1
1 3 2
2 2
2 3
2 4
출력
x
x
x
x
o
x

예제 3

입력
8
2 44
1 3 1
2 1
2 77
1 4 1
1 2 1
2 3
2 91191
출력
o
!
!
x
o
코드를 제출하려면 로그인하세요.