QOJ.ac

QOJ

Time Limit: 1 s Memory Limit: 512 MB Total points: 100 Hackable ✓

#1127. Експеримент із вірусом

Statistics

Чи знаєте ви Just Odd Inventions Co., Ltd.? Ця компанія займається «просто дивними винаходами». Тут називатимемо її компанією JOI.

Компанія JOI розробила новий вірус «JOI Virus». Компанія JOI хоче провести експеримент, заразивши мешканців острова IOI вірусом JOI Virus.

Острів IOI має прямокутну форму. Є $R-1$ паралельних доріг зі сходу на захід і $C-1$ паралельних доріг із півночі на південь. Вони ділять острів на $RC$ ділянок. На кожній ділянці живе рівно 1 мешканець. Мешканця ділянки, що є $i$-ю з півночі та $j$-ю із заходу ($1 \le i \le R$, $1 \le j \le C$), називатимемо мешканцем $(i,j)$.

На острові IOI доба складається з $M$ часових проміжків. Часовий проміжок із номером $k$ називатимемо часовим проміжком $k$. Вітер завжди дме з одного з напрямків: північ, південь, схід або захід. Напрямок може змінюватися залежно від часового проміжку. В одному й тому самому часовому проміжку вітер дме з того самого напрямку незалежно від дня.

Кожен мешканець має характеристику «опірність». Опірність мешканця $(i,j)$ ($1 \le i \le R$, $1 \le j \le C$) задається невід'ємним цілим числом $U_{i,j}$.

  • Якщо $U_{i,j}$ дорівнює $0$, це означає, що мешканець $(i,j)$ має високу опірність і не заражається вірусом JOI Virus.
  • Якщо $U_{i,j}$ — додатне ціле число, мешканець $(i,j)$ може заразитися вірусом JOI Virus. Якщо наведена нижче умова виконується протягом $U_{i,j}$ послідовних часових проміжків, цей мешканець заразиться з наступного часового проміжку:

    • Мешканець сусідньої ділянки в напрямку, звідки дме вітер, уже заражений вірусом JOI Virus.

Зауважте, що останній часовий проміжок однієї доби та перший часовий проміжок наступної доби є послідовними.

Для експерименту ми хочемо заразити принаймні 1 мешканця, але не хочемо заразити забагато мешканців. Спочатку ми обираємо 1 мешканця як першого зараженого та заражаємо його вірусом JOI Virus. Мешканця з опірністю $0$ не можна обрати першим зараженим.

За заданими напрямками, звідки дме вітер у кожному часовому проміжку, та опірністю кожного мешканця напишіть програму, яка обчислює мінімальну кількість заражених мешканців через $10^{100}$ днів та кількість мешканців, вибір яких першим зараженим дає цей мінімум.

Вхідні дані

Прочитайте зі стандартного вводу такі дані.

$$ \begin{array}{lll} M & R & C \\ D & & \\ U_{1,1} & \cdots & U_{1,C} \\ \vdots & & \vdots \\ U_{R,1} & \cdots & U_{R,C} \end{array} $$

$D$ — рядок довжини $M$, що задає напрямки, звідки дме вітер на острові IOI. $D$ складається із символів чотирьох видів: N, S, W або E. Символ $k$ ($1 \le k \le M$) задає напрямок, звідки дме вітер у часовому проміжку $k$. Зауважте, що це не напрямок, у який дме вітер. N означає північ, S — південь, W — захід, а E — схід.

Вихідні дані

Виведіть у стандартний вивід два рядки.

Перший рядок має містити мінімальну кількість заражених мешканців через $10^{100}$ днів. Другий рядок має містити кількість мешканців, вибір яких першим зараженим дає мінімальну кількість заражених мешканців.

Обмеження

  • $1 \le M \le 100\,000$.
  • $1 \le R \le 800$.
  • $1 \le C \le 800$.
  • $D$ — рядок довжини $M$, що містить лише N, S, W та E.
  • $0 \le U_{i,j} \le 100\,000$ ($1 \le i \le R$, $1 \le j \le C$).
  • Існує принаймні одна пара $(i,j)$, для якої $1 \le U_{i,j}$ ($1 \le i \le R$, $1 \le j \le C$).

Підзадачі

  1. (14 балів) $D$ містить лише W та E.
  2. (6 балів) $1 \le R \le 50$, $1 \le C \le 50$.
  3. (80 балів) Додаткових обмежень немає.

Приклади

Вхідні дані 1

6 3 4
SWNEES
2 1 1 2
1 0 1 3
1 1 2 2

Вихідні дані 1

8
8

Пояснення

Розгляньмо випадок, коли першим зараженим обрано мешканця $(3,1)$.

  • Для мешканця $(2,1)$ у часовому проміжку 1 дня 1 вітер дме з півдня, а сусідній мешканець на півдні вже заражений, тому цей мешканець заразиться з часового проміжку 2 дня 1.
  • Для мешканця $(3,2)$ у часовому проміжку 2 дня 1 вітер дме із заходу, а сусідній мешканець на заході вже заражений, тому цей мешканець заразиться з часового проміжку 3 дня 1.
  • Для мешканця $(1,1)$ у часовому проміжку 6 дня 1 вітер дме з півдня, а сусідній мешканець на півдні вже заражений; у часовому проміжку 1 дня 2 вітер також дме з півдня, а сусідній мешканець на півдні вже заражений, тому цей мешканець заразиться з часового проміжку 2 дня 2.
  • Для мешканця $(1,2)$ у часовому проміжку 2 дня 2 вітер дме із заходу, а сусідній мешканець на заході вже заражений, тому цей мешканець заразиться з часового проміжку 3 дня 2.
  • Для мешканця $(1,3)$ у часовому проміжку 2 дня 3 вітер дме із заходу, а сусідній мешканець на заході вже заражений, тому цей мешканець заразиться з часового проміжку 3 дня 3.
  • Для мешканця $(2,3)$ у часовому проміжку 3 дня 3 вітер дме з півночі, а сусідній мешканець на півночі вже заражений, тому цей мешканець заразиться з часового проміжку 4 дня 3.
  • Для мешканця $(3,3)$ у часовому проміжку 2 дня 4 вітер дме із заходу, а сусідній мешканець на заході вже заражений; у часовому проміжку 3 дня 4 вітер дме з півночі, а сусідній мешканець на півночі вже заражений, тому цей мешканець заразиться з часового проміжку 4 дня 4.

Більше жоден мешканець не заразиться вірусом JOI Virus. Отже, якщо першим зараженим обрати мешканця $(3,1)$, через $10^{100}$ днів вірусом JOI Virus будуть заражені 8 мешканців.

Хоч би якого мешканця ми обрали першим зараженим, кількість заражених вірусом JOI Virus через $10^{100}$ днів не може бути меншою за 8, тому в першому рядку потрібно вивести 8. Якщо обрати першим зараженим мешканця $(1,1)$, $(1,2)$, $(1,3)$, $(2,1)$, $(2,3)$, $(3,1)$, $(3,2)$ або $(3,3)$, кількість заражених через $10^{100}$ днів дорівнюватиме 8, тому в другому рядку потрібно вивести 8.

Вхідні дані 2

4 4 4
EWWE
1 2 1 2
1 1 1 1
0 0 0 0
2 2 2 4

Вихідні дані 2

3
3

Пояснення

Цей приклад вхідних і вихідних даних задовольняє обмеження підзадачі 1.

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.