AT_joi2011yo_f.JOI 旗 (JOI Flag)

通过率:0%

AC君温馨提醒

该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

日本信息奥林匹克委员会为了宣传今年的日本信息奥林匹克(JOI),计划制作一种以 JOI 字母为主题的旗帜。这种旗帜需要设计成「好的旗帜」。所谓「好的旗帜」,是指由字母 J、O、I 组成的 MM 行 NN 列的矩形排列,并且至少有一个区域满足下图所示的排列:J 的右边是 O,而 J 的下面是 I。

以下展示了两个「好的旗帜」的示例:

2011-yo-t6-fig02.png

反之,下图中的两个则不是「好的旗帜」:

2011-yo-t6-fig03.png

现在,你需要根据已知的 MM 和 NN 值,以及部分确定为 J、O、I 的位置,来计算所有可能的「好的旗帜」的总数。请输出这些「好的旗帜」数量对 100 000 (= 105)100\,000\ (=\ 10^5) 取模的结果。

输入格式

输入包括 1+M1 + M 行。

第 11 行包含两个整数 MM 和 NN (2≤M≤202 \leq M \leq 20,2≤N≤202 \leq N \leq 20),表示旗帜的行数和列数。

接下来的 MM 行,每行是一个长度为 NN 的字符串,其中每个字符可以是 J、O、I 或 ?。若某位置为 J、O 或 I,则表示此位置的字母已确定;若为 ?,则表示此位置的字母尚未确定。

输出格式

输出一个整数,表示所有可能的「好的旗帜」数量对 100 000 (= 105)100\,000\ (=\ 10^5) 取模的结果。

输入输出样例

  • 输入#1

    2 3
    ??O
    IIJ

    输出#1

    4
  • 输入#2

    2 2
    ??
    ??

    输出#2

    3
  • 输入#3

    3 3
    ??I
    ???
    O?J

    输出#3

    53
  • 输入#4

    5 4
    JOI?
    ????
    ????
    ????
    ?JOI

    输出#4

    28218

说明/提示

样例解释 1

在样例1中,有以下四种「好的旗帜」的可能性:

2011-yo-t6-fig04.png

样例解释 4

在样例4中,总共有 2 428 2182\,428\,218 种「好的旗帜」,所以需要输出它对 100 000 (= 105)100\,000\ (=\ 10^5) 取模后的结果 28 21828\,218。

本翻译由 AI 自动生成

输入解题思路,AI测评打分。不知道怎么写?

首页