QOJ.ac

QOJ

Time Limit: 5 s Memory Limit: 256 MB Total points: 100

#406. Voileipä

Statistics

JOI osallistuu IOI:n illanviettoon. Tilaisuudessa voileivät on aseteltu $R$ rivin ja $C$ sarakkeen ruudukkoon. Jokainen voileipä on tasakylkisen suorakulmaisen kolmion muotoinen siten, että sen kaksi kylkeä ovat yhtä pitkiä kuin ruudukon ruudun sivu, ja jokaisessa ruudussa on kaksi voileipää asetettuna niin, että niiden hypotenuusat koskettavat toisiaan. Alla oleva kuva esittää esimerkin voileipien asettelusta.

problem_406_3458388a51fae6a8179754f56fc767fa.png

Kuva 1. Esimerkki voileipien asettelusta

Voileipää ei voi ottaa, jos se täyttää molemmat seuraavista ehdoista: Sen hypotenuusa koskettaa toista voileipää, jota ei ole vielä otettu. Ainakin toinen sen kahdesta muusta sivusta kuin hypotenuusasta koskettaa toista voileipää, jota ei ole vielä otettu.

Muut kuin tällaiset voileivät voidaan ottaa.

Tilaa, jossa yhtään voileipää ei ole vielä otettu, kutsutaan alkutilaksi. Tietyn voileivän ottaminen alkutilasta voi vaatia muiden voileipien ottamista ensin. Voileipien asettelusta riippuen joitakin voileipiä ei välttämättä voida ottaa lainkaan.

JOI haluaa syödä molemmat samassa ruudussa olevat voileivät. Hän ei ole vielä päättänyt, minkä ruudun voileivät hän syö.

Hän on kiinnostunut siitä, mikä on pienin määrä voileipiä, jotka on otettava alkutilasta lähtien, jotta saadaan tietyn ruudun molemmat voileivät.

Tehtävä

Kun voileipien asettelu annetaan, selvitä jokaiselle ruudulle, onko kyseisen ruudun molemmat voileivät mahdollista saada ottamalla joitakin voileipiä alkutilasta lähtien. Jos se on mahdollista, etsi pienin määrä voileipiä, jotka täytyy ottaa. Huomaa, että voileipien lukumäärään tulee laskea mukaan myös nuo kaksi tavoitteena olevaa voileipää.

Syöte

Lue seuraavat tiedot vakiosyötteestä: Ensimmäisellä rivillä on kaksi välilyönnillä erotettua kokonaislukua $R$ ja $C$. Nämä ilmaisevat, että voileivät on aseteltu $R$ rivin ja $C$ sarakkeen ruudukkoon. Seuraavien $R$ rivin $i$:nnellä rivillä ($1 \le i \le R$) on pituudeltaan $C$ oleva merkkijono. Jokainen merkki on joko 'N' tai 'Z'. Tämän merkkijonon $j$:s merkki ($1 \le j \le C$) ilmaisee voileipien asettelun ruudussa, joka sijaitsee $i$:nnellä rivillä ylhäältä ja $j$:nnessä sarakkeessa vasemmalta. 'N' ja 'Z' tarkoittavat vastaavasti seuraavia asetteluja.

problem_406_6215a61d400ae88cfe74a0a9599ce3dd.png

Kuva 2. Voileipien asettelu kussakin ruudussa

Tuloste

Tulosta $R$ riviä vakiotulosteeseen. Rivillä $i$ ($1 \le i \le R$) tulee olla $C$ välilyönnein erotettua kokonaislukua. Luvun $j$ ($1 \le j \le C$) tulee olla pienin määrä voileipiä, jotka täytyy ottaa, jotta saadaan molemmat voileivät ruudusta, joka sijaitsee $i$:nnellä rivillä ylhäältä ja $j$:nnessä sarakkeessa vasemmalta. Jos niiden ottaminen ei ole mahdollista, tulosta -1.

Rajoitukset

Kaikki syötetiedot täyttävät seuraavat ehdot: $1 \le R \le 400$ $1 \le C \le 400$

Osatehtävät

Osatehtävä 1 [35 pistettä]

  • $R \le 50$
  • $C \le 50$

Osatehtävä 2 [65 pistettä]

  • Ei lisärajoituksia.

Esimerkit

Syöte 1

2 3
NZN
ZZN

Tuloste 1

10 8 2
8 6 4

Huomautus 1

Esimerkin 1 voileipien asettelu vastaa tehtävänannon Kuvaa 1. Esimerkiksi saadakseen kaksi voileipää ruudusta, joka on 2. rivillä ylhäältä ja 2. sarakkeessa vasemmalta, voileivät voidaan ottaa seuraavassa järjestyksessä: Otetaan 1. rivin 3. sarakkeen ruudun oikean yläkulman voileipä. Otetaan 1. rivin 3. sarakkeen ruudun vasemman alakulman voileipä. Otetaan 2. rivin 3. sarakkeen ruudun oikean yläkulman voileipä. Otetaan 2. rivin 3. sarakkeen ruudun vasemman alakulman voileipä. Otetaan 2. rivin 2. sarakkeen ruudun oikean alakulman voileipä. Otetaan 2. rivin 2. sarakkeen ruudun vasemman yläkulman voileipä.

Yhteensä otetaan 6 voileipää, ja koska tämä on pienin mahdollinen määrä, tulostetaan 6.

Syöte 2

2 2
NZ
ZN

Tuloste 2

-1 -1
-1 -1

Huomautus 2

Tässä tapauksessa yhtäkään voileipää ei voida ottaa.

Syöte 3

5 5
NZZZN
NNNZN
NNZNN
NZNNN
NZZZN

Tuloste 3

10 12 14 16 2
8 -1 -1 -1 4
6 -1 -1 -1 6
4 -1 -1 -1 8
2 16 14 12 10

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
EditorialOpen Official EditorialQingyu- Download

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.