CFCF2172K.Kindergarten Homework

提高+/省选-

通过率:0%

AC君温馨提醒

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

题目描述

Kenny 是一名幼儿园老师,他正在教学生们数学。为了帮助他们学习,他希望以一种有趣且不令人厌烦的方式布置作业——数字搜寻游戏。

数字搜寻谜题类似于单词搜索谜题,但它不是寻找单词,而是寻找数学表达式。每个谜题由两部分组成:一个有 nnmm 列的网格,以及一个目标数字列表 a1,a2,,aqa_1, a_2, \dots, a_q。网格中的每个格子包含 1 到 9 的数字、加号 + 或乘号 *。

你可以通过连接同一行、同一列或同一对角线(任意方向)上的一个或多个连续字符,按直线(正反两个方向均可)形成一个表达式。每个表达式由其起始格和结束格唯一确定。如果两个表达式的起点或终点不同,即使内容完全相同,也视为不同的表达式。

一个合法表达式必须是如下形式:

numopnumop  opnumnum \quad op \quad num \quad op \ \dots \ op \quad num

其中每个 numnum 是由一个或多个数字组成的数字串,每个 opop 是 + 或 。例如,“123”和“1+23+45”是合法表达式,“+123”和“2**5”不是。表达式的值按通常的算术规则计算(即乘法优先级高于加法)。

你的目标是,对于每个目标数字 aia_i,计算网格中有多少个不同的合法表达式,其计算结果为 aia_i

下面以一个完成的数字搜寻谜题为例:

记第 rr 行第 cc 列的格子为 (r,c)(r, c)

  1. 6767 的答案是 22,即在 (1,4)(1, 4) 开始的两个“67”表达式。虽然内容相同,但由于终点位置不同,视为两个不同表达式。
  2. 420420 的答案是 00,即没有任何表达式计算结果为 420420
  3. 33 的答案是 44
    • 表达式“3”出现在 (1,7)(1,7)(9,5)(9,5)
    • 表达式“1+2”出现在 (6,2)(6,2)(8,2)(8,2)
    • 表达式“2+1”出现在 (8,2)(8,2)(6,2)(6,2)。即使它们经过同一组格子,由于起点不同,也视为不同。
  4. 727727 的答案是 33
    • 表达式“7+16*45”出现在 (2,1)(2,1)(8,7)(8,7)。注意先算乘法再算加法。
    • 表达式“727”出现在 (3,5)(3,5)(3,7)(3,7),以及 (3,7)(3,7)(3,5)(3,5)。它们内容相同,但视为两个不同表达式,因为起点不同。

Kenny 迫不及待希望看到孩子们享受这些有趣的数字搜寻谜题。但是,在给孩子们出题前,他需要先知道谜题的答案。请你帮助他计算每个谜题的答案。

输入格式

第一行包含三个整数 nnmmqq,分别表示网格的行数、列数和目标数字的个数。

接下来 nn 行,每行包含一个长度为 mm 的字符串,表示网格内容。

接下来的 qq 行,每行包含一个整数 aia_i,表示第 ii 个目标数字。

  • 1n,m10001 \leq n, m \leq 1000
  • 1n×m3×1041 \leq n \times m \leq 3 \times 10^4
  • 1q1051 \leq q \leq 10^5
  • 网格只包含字符 “123456789+*”。
  • 1ai1061 \leq a_i \leq 10^6
  • 所有 aia_i 互不相同。

输出格式

输出 qq 行,每行一个整数,第 ii 行表示目标数字 aia_i 的答案。

输入输出样例

  • 输入#1

    9 8 4
    4216793+
    717*4*54
    7+5+727*
    45149+71
    8+26697*
    +189*2+9
    5+*244+7
    42595952
    97+*315+
    67
    420
    3
    727

    输出#1

    2
    0
    4
    3
首页