QOJ.ac

QOJ

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

#406. Sandwich

Statistics

JOI participe à la réception de l'IOI. Des sandwichs y sont disposés sur une grille de cases carrées comportant $R$ lignes et $C$ colonnes. Chaque sandwich a la forme d'un triangle rectangle isocèle dont les deux côtés de l'angle droit ont la même longueur que le côté d'une case. Chaque case contient deux sandwichs dont les hypoténuses se touchent. La figure ci-dessous montre un exemple de disposition.

problem_406_275c828ec6ee686b429b7d6d3d7ca43f.png

Figure 1. Exemple de disposition des sandwichs

On ne peut pas prendre un sandwich qui satisfait simultanément les deux conditions suivantes.

  • Son hypoténuse touche un autre sandwich qui n'a pas encore été pris.
  • Au moins un de ses deux autres côtés touche un autre sandwich qui n'a pas encore été pris.

Tout autre sandwich peut être pris.

L'état dans lequel aucun sandwich n'a encore été pris est appelé l'état initial. Pour prendre un sandwich donné à partir de cet état, il peut être nécessaire d'en prendre d'autres auparavant. Selon la disposition, certains sandwichs peuvent être impossibles à prendre.

JOI souhaite manger les deux sandwichs d'une même case. Il n'a pas encore choisi cette case.

Il se demande quel est le nombre minimal de sandwichs à prendre, à partir de l'état initial, pour obtenir les deux sandwichs d'une case donnée.

Tâche

Étant donnée la disposition des sandwichs, écrivez un programme qui détermine, pour chaque case, s'il est possible de prendre ses deux sandwichs en prenant un certain nombre de sandwichs à partir de l'état initial et, si c'est possible, calcule le nombre minimal de sandwichs à prendre. Ce nombre doit inclure les deux sandwichs recherchés.

Entrée

Lisez les données suivantes sur l'entrée standard.

  • La première ligne contient deux entiers $R,C$ séparés par un espace. Ils indiquent que les sandwichs sont disposés sur une grille de cases carrées comportant $R$ lignes et $C$ colonnes.
  • La $i$-ème ligne ($1 \le i \le R$) parmi les $R$ lignes suivantes contient une chaîne de $C$ caractères. Chaque caractère est N ou Z. Le $j$-ème caractère en partant de la gauche ($1 \le j \le C$) décrit la disposition des sandwichs dans la case de la $i$-ème ligne depuis le haut et de la $j$-ème colonne depuis la gauche. N et Z correspondent aux dispositions suivantes.
problem_406_d8a5d95cf6a11608a0fe9424b92e91ca.png

Figure 2. Disposition des sandwichs dans chaque case

Sortie

Écrivez $R$ lignes sur la sortie standard. La $i$-ème ligne ($1 \le i \le R$) doit contenir $C$ entiers séparés par des espaces. Le $j$-ème entier ($1 \le j \le C$) doit être le nombre minimal de sandwichs à prendre pour obtenir les deux sandwichs de la case de la $i$-ème ligne depuis le haut et de la $j$-ème colonne depuis la gauche. Si cela est impossible, écrivez $-1$.

Contraintes

Toutes les données d'entrée satisfont les conditions suivantes.

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

Sous-tâches

Sous-tâche 1 [35 points]

Les conditions suivantes sont satisfaites.

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

Sous-tâche 2 [65 points]

Il n'y a pas de contrainte supplémentaire.

Exemples

Entrée 1

2 3
NZN
ZZN

Sortie 1

10 8 2
8 6 4

Remarque

La disposition des sandwichs du premier exemple correspond à la figure 1 de l'énoncé.

Par exemple, pour prendre les deux sandwichs de la case de la deuxième ligne depuis le haut et de la deuxième colonne depuis la gauche, on peut procéder dans l'ordre suivant.

  • Prendre le sandwich en haut à droite de la case de la première ligne et de la troisième colonne.
  • Prendre le sandwich en bas à gauche de la case de la première ligne et de la troisième colonne.
  • Prendre le sandwich en haut à droite de la case de la deuxième ligne et de la troisième colonne.
  • Prendre le sandwich en bas à gauche de la case de la deuxième ligne et de la troisième colonne.
  • Prendre le sandwich en bas à droite de la case de la deuxième ligne et de la deuxième colonne.
  • Prendre le sandwich en haut à gauche de la case de la deuxième ligne et de la deuxième colonne.

On prend ainsi 6 sandwichs au total. Ce nombre étant minimal, on affiche 6.

Entrée 2

2 2
NZ
ZN

Sortie 2

-1 -1
-1 -1

Remarque

Dans ce cas, aucun sandwich ne peut être pris.

Entrée 3

5 5
NZZZN
NNNZN
NNZNN
NZNNN
NZZZN

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