#P16389. 山峦绘制
山峦绘制
题目背景
Manao 正在制作一款二维像素风游戏。为了让游戏场景更有层次感,他准备在宽度为 的屏幕上依次绘制 座山峰。
每座山峰都是一个等腰直角三角形。后绘制的山峰会覆盖先绘制的山峰,因此,最终画面中一座山峰可能只露出一部分,甚至完全不可见。
Manao 不小心遗失了所有山峰峰顶的横坐标,只保留了每座山峰的高度,以及最终画面中每座山峰在哪些列仍然可见。请你根据这些信息,统计可能的绘制方案数。
题目描述
屏幕共有 列,列编号从 到 。屏幕高度可以认为是所有山峰高度的最大值。
共有 座山峰,编号为 ,并按照编号从小到大的顺序依次绘制。
第 座山峰的高度为 ,其峰顶横坐标记为 ,满足:
峰顶纵坐标为 。在第 列中,第 座山峰覆盖的像素数量为:
也就是说,如果该值为 ,那么这座山峰会覆盖第 列中从底部开始的 个像素。
绘制山峰时,后绘制的山峰会覆盖同一像素位置上先绘制的山峰。
对于每座山峰 ,给定一个长度为 的字符串 :
- 若 ,表示最终画面中第 列至少有一个像素属于第 座山峰;
- 若 ,表示最终画面中第 列没有任何像素属于第 座山峰。
请统计满足所有高度与可见性信息的峰顶横坐标序列:
的数量。
由于答案可能很大,请输出答案对 取模后的结果。
保证至少存在一种合法方案。
输入格式
第一行包含两个整数 ,分别表示山峰数量和屏幕宽度。
第二行包含 个整数:
其中 表示第 座山峰的高度。
接下来 行,第 行包含一个长度为 的字符串 ,描述第 座山峰在最终画面中的可见列。
输出格式
输出一个整数,表示合法峰顶横坐标序列的数量对 取模后的结果。
数据范围
对于所有测试数据:
- ;
- ;
- ;
- 的长度均为 ;
- 只包含字符
X和-; - 至少存在一种合法方案。
样例 1
输入
3 6
2 3 2
------
XXXX--
---XXX
输出
4
说明
第 座和第 座山峰的峰顶位置可以唯一确定。
第 座山峰的峰顶可以位于第 列,因此共有 种方案。
样例 2
输入
3 13
4 3 4
XXXXX--------
----------XXX
----XXXXXXX--
输出
4
说明
三座山峰的峰顶横坐标依次可能为:
(2, 10, 7)
(2, 11, 7)
(3, 10, 7)
(3, 11, 7)
因此答案为 。
样例 3
输入
4 9
13 2 3 2
XXXXXXXXX
-XXX-----
----XXXXX
-----XXX-
输出
9
样例 4
输入
5 7
8 2 9 3 10
X------
-------
------X
-------
XXXXXXX
输出
98