QOJ.ac

QOJ

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

#406. Sandwich

Statistics

JOI-kun sedang menghadiri acara ramah tamah IOI. Pada acara tersebut, sandwich disusun pada kisi persegi dengan $R$ baris dan $C$ kolom. Setiap sandwich berbentuk segitiga siku-siku sama kaki dengan kedua kaki sama panjang dengan sisi satu petak. Pada setiap petak terdapat dua sandwich yang saling bersentuhan pada sisi miringnya. Gambar berikut menunjukkan contoh susunan sandwich.

problem_406_c34c087ba70c368931a90c1eaa843d88.png

Gambar 1. Contoh susunan sandwich

Sandwich yang memenuhi kedua kondisi berikut sekaligus tidak dapat diambil.

  • Sisi miringnya bersentuhan dengan sandwich lain yang belum diambil.
  • Setidaknya satu dari dua sisinya selain sisi miring bersentuhan dengan sandwich lain yang belum diambil.

Sandwich selain itu dapat diambil.

Keadaan ketika belum ada sandwich yang diambil disebut keadaan awal. Untuk mengambil suatu sandwich dari keadaan awal, mungkin perlu mengambil beberapa sandwich lain terlebih dahulu. Bergantung pada susunannya, mungkin juga ada sandwich yang tidak dapat diambil.

JOI-kun ingin memakan kedua sandwich yang berada di petak yang sama. Ia belum menentukan petak mana yang sandwich-nya akan dimakan.

Ia ingin mengetahui jumlah minimum sandwich yang harus diambil agar dapat mengambil kedua sandwich pada suatu petak dari keadaan awal.

Tugas

Diberikan susunan sandwich, tulislah program yang, untuk setiap petak, menentukan apakah kedua sandwich di petak tersebut dapat diambil dengan mengambil beberapa sandwich dari keadaan awal. Jika dapat, hitung jumlah minimum sandwich yang perlu diambil. Jumlah ini juga mencakup kedua sandwich yang dituju.

Masukan

Bacalah data berikut dari masukan standar.

  • Baris pertama berisi dua bilangan bulat $R,C$ yang dipisahkan oleh spasi. Ini berarti sandwich disusun pada kisi persegi dengan $R$ baris dan $C$ kolom.
  • Baris ke-$i$ ($1 \le i \le R$) dari $R$ baris berikutnya berisi string sepanjang $C$ karakter. Setiap karakter adalah N atau Z. Karakter ke-$j$ dari kiri ($1 \le j \le C$) menunjukkan susunan sandwich pada petak di baris ke-$i$ dari atas dan kolom ke-$j$ dari kiri. N dan Z masing-masing menunjukkan susunan berikut.
problem_406_2892eef887185930d4cba63ce64b0784.png

Gambar 2. Susunan sandwich pada setiap petak

Keluaran

Tulislah $R$ baris ke keluaran standar. Pada baris ke-$i$ ($1 \le i \le R$), tulislah $C$ bilangan bulat yang dipisahkan oleh spasi. Bilangan ke-$j$ ($1 \le j \le C$) harus berupa jumlah minimum sandwich yang perlu diambil agar kedua sandwich pada petak di baris ke-$i$ dari atas dan kolom ke-$j$ dari kiri dapat diambil. Jika tidak dapat diambil, tulislah $-1$.

Batasan

Semua data masukan memenuhi kondisi berikut.

  • $1 \le R \le 400$.
  • $1 \le C \le 400$.

Subsoal

Subsoal 1 [35 poin]

Kondisi berikut dipenuhi.

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

Subsoal 2 [65 poin]

Tidak ada batasan tambahan.

Contoh

Masukan 1

2 3
NZN
ZZN

Keluaran 1

10 8 2
8 6 4

Penjelasan

Susunan sandwich pada contoh masukan 1 sesuai dengan Gambar 1 dalam pernyataan soal.

Misalnya, untuk mengambil kedua sandwich pada petak di baris ke-2 dari atas dan kolom ke-2 dari kiri, sandwich dapat diambil dalam urutan berikut.

  • Ambil sandwich kanan atas pada petak di baris ke-1 dari atas dan kolom ke-3 dari kiri.
  • Ambil sandwich kiri bawah pada petak di baris ke-1 dari atas dan kolom ke-3 dari kiri.
  • Ambil sandwich kanan atas pada petak di baris ke-2 dari atas dan kolom ke-3 dari kiri.
  • Ambil sandwich kiri bawah pada petak di baris ke-2 dari atas dan kolom ke-3 dari kiri.
  • Ambil sandwich kanan bawah pada petak di baris ke-2 dari atas dan kolom ke-2 dari kiri.
  • Ambil sandwich kiri atas pada petak di baris ke-2 dari atas dan kolom ke-2 dari kiri.

Totalnya ada $6$ sandwich yang diambil. Karena ini adalah jumlah minimum, keluarkan $6$.

Masukan 2

2 2
NZ
ZN

Keluaran 2

-1 -1
-1 -1

Penjelasan

Dalam kasus ini, tidak ada sandwich yang dapat diambil.

Masukan 3

5 5
NZZZN
NNNZN
NNZNN
NZNNN
NZZZN

Keluaran 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.