#B1484. 矿道开采
矿道开采
【题目描述】
你有一条长度为 的矿道。矿道的俯视图有五行:
- 第 1 行是矿道一侧较远的一层区域,第 2 行是同一侧贴近矿道的一层区域;
- 第 3 行是原有矿道;
- 第 4 行是矿道另一侧贴近矿道的一层区域,第 5 行是同一侧较远的一层区域。
第 1 行和第 5 行表示距离矿道较远的位置,第 2 行和第 4 行表示贴近矿道的位置。图中 . 表示已经打通的区域,# 表示圆石,* 表示矿石。
你只能站在第 3 行的矿道中,并沿着垂直于矿道的方向挖掘。由于矿道已经连通,你可以自由选择列进行挖掘,横向移动不消耗体力。
对于某一列的一侧,如果要挖到距离矿道两格的位置,必须先挖通贴近矿道的一格。挖通一格后,该位置视为已经打通。
现在你有 点体力,请计算最多可以获得多少块矿石。
【输入描述】
第一行输入两个整数 ,分别表示矿道长度和体力值。
接下来输入五行,每行一个长度为 的字符串。
保证:
- ;
- ;
- 第 1、2、4、5 行的字符串只包含
#和*; - 第 3 行恰好由 个
.组成。
【输出描述】
输出一行一个整数,表示最多可以获得的矿石数量。
【样例 1】
【样例 1 输入】
20 7
##*#######**########
#########*##########
....................
#####*######**######
####################
【样例 1 输出】
5
【样例 1 解释】
一种最优挖法如下:
- 挖掘第 10 列上方贴近矿道的矿石,消耗 点体力,获得 块矿石;
- 挖掘第 11 列上方贴近矿道的圆石,再继续挖掘该列远处的矿石,共消耗 点体力,获得 块矿石;
- 挖掘第 6、13、14 列下方贴近矿道的矿石,共消耗 点体力,获得 块矿石。
总共挖掘 格,消耗 点体力,获得 块矿石。
【样例 2】
【样例 2 输入】
8 8
*##*#*##
*#*#*#*#
........
#*#*##*#
*#*#*#*#
【样例 2 输出】
8
【样例 2 解释】
上方贴近矿道的矿石位于第 、、、 列,下方贴近矿道的矿石位于第 、、 列。先挖掘这 个位置,消耗 点体力,获得 块矿石。
此时还剩 点体力。第 列上方和第 列下方的远处位置都是矿石,并且对应的贴近矿道位置已经挖通,因此任选其中一个继续挖掘,都能再获得 块矿石。
其他远处的矿石前面是圆石,需要先花费 点体力打通圆石,再花费 点体力挖掘矿石,无法在剩余体力内获得。因此最多获得 块矿石。
【数据规模与约定】
| 测试点编号 | 分数 | 特殊性质 |
|---|---|---|
1 ~ 3 |
30 | , |
4 ~ 6 |
只能向上或只能向下挖掘 | |
7 ~ 10 |
40 | 无特殊性质 |