列表

详情


NC53198. 病毒实验

描述

译自 JOI Open 2019 T3 「ウイルス実験 / Virus Experiment
你知道「净是一些鬼畜发明公司」(JustOddInventionsCo.,Ltd.)吗?这家公司就是发明一些鬼畜玩意的。现在我们就叫它JOI公司。
JOI公司开发了一种新型病毒——「JOI病毒」。JOI公司想要通过用JOI病毒感染IOI岛上的居民的方式做一次病毒实验。
IOI岛是一个矩形,从东向西有R-1条互相平行的街道,从北向南有C-1条互相平行的街道。它们把岛划分为RC个区域。每个区域只住着一个居民,我们称住在从北数第i区域,从西数第j个区域的居民为居民(i,j)。
在IOI岛上,一天共有M个时间段。我们称第k个时间段为时段k。风总是从东西南北四个方向吹来,风向取决于时段。如果时段相同,则风向相同,与日期无关。
每个居民都有一个抵抗力。居民(i,j)的抵抗力用一个非负整数表示。
  • 如果,表示居民(i,j)的抵抗力很高,并且这位居民不会感染JOI病毒;
  • 如果,表示居民(i,j)可能会感染JOI病毒。如果以下情况持续了个时段,这位居民就将在下一个时段感染JOI病毒:住在风吹来方向且与这位居民相邻的居民感染了JOI病毒。
注意一天最后一个时段和下一天第一个时段是连续的。为了完成实验,我们想要至少感染一位居民,但是我们不想感染太多的居民。在初始的时候,我们选择一位居民作为第一个被感染的人,然后使他感染JOI病毒。我们不能感染抵抗力为0的居民。
给定每一个时段的风向,写一个程序计算在天之后至少会有多少居民被感染,和达到这个最小值选择初始感染者的方案数。

输入描述

第一行三个正整数M,R,C,意义如题目描述。
接下来一行一个长为M的字符串D,表示一天中每个时段的风向。D中只包含N,S,W,E四种字符。第个字符表示时段k风的来向,N代表风从北吹来,S表示风从南方吹来,W表示风从西吹来,E表示风从东吹来。
接下来R行,每行C个整数。第i行第j列的整数表示居民(i,j)的抵抗力。

输出描述

输出两行。第一行表示在天之后至少能感染居民的数量。第二行输出达到这个最小值的情况下选择初始感染者的方案数。

示例1

输入:

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

输出:

8
8

说明:

考虑当居民(3,1)是初始感染者的情况。
对于居民(2,1),在第1天的时段1,风从南方吹来,并且位于他南方的相邻居民(即居民(3,1))已经感染了病毒,因此这位居民将在第1天的时段2感染;
对于居民(3,2),在第1天的时段2,风从西方吹来,并且位于他西方的相邻居民(即居民(3,1))已经感染了病毒,因此这位居民将在第1天的时段3感染;
对于居民(1,1),在第1天的时段6,风从南方吹来,并且位于他南方的相邻居民(即居民(2,1))已经感染了病毒,在第2天的时段1,风从南方吹来,并且位于他南方的相邻居民(即居民(2,1))已经感染了病毒,因此这位居民将在第2天的时段2感染;
对于居民(1,2),在第2天的时段2,风从西方吹来,并且位于他西方的相邻居民(即居民(1,1))已经感染了病毒,因此这位居民将在第2天的时段3感染;
对于居民(1,3),在第3天的时段2,风从西方吹来,并且位于他西方的相邻居民(即居民(1,2))已经感染了病毒,因此这位居民将在第3天的时段3感染;
对于居民(2,3),在第3天的时段3,风从北方吹来,并且位于他北方的相邻居民(即居民(1,3))已经感染了病毒,因此这位居民将在第3天的时段4感染;
对于居民(3,3),在第4天的时段2,风从西方吹来,并且位于他西方的相邻居民(即居民(3,2))已经感染了病毒,在第4天的时段3,风从北方吹来,并且位于他北方的相邻居民(即居民(2,3))已经感染了病毒,因此这位居民将在第4天的时段4感染。
这样就没有再多的居民会感染JOI病毒了。于是,当我们选择居民(3,1)作为初始感染者的情况下,10^{100}天后就有8位居民被感染。
无论如何选择初始感染者,我们都不能让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

输出:

3
3

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

上一题