CF2091F.Igor and Mountain
普及+/提高
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
IT Campus "NEIMARK" 的访客不仅是优秀的程序员,更是体魄强健的运动爱好者!有人练习游泳,有人划船,还有人进行攀岩!
Igor 大师是当地攀岩界的知名人物。某天,他前往山区攀登一座山峰。作为经验丰富的攀岩者,Igor 决定不沿既有路线,而是利用自己的技巧严格垂直攀登。
Igor 找到了一块垂直的矩形山体区域,并将其在脑海中划分为 n 个水平层。随后他将每层用垂直隔板分割为 m 个区段。观察这些区段时,Igor 发现了可供抓握的凸起(以下称为支点)。因此,所选山体区域可表示为 n×m 的矩形,其中某些单元格包含支点。
作为资深程序员,Igor 决定计算有效路线的数量。路线被定义为由不同支点组成的序列。当满足以下条件时,路线被视为有效:
- 路线中第一个支点位于最底层(第 n 行);
- 路线中最后一个支点位于最顶层(第 1 行);
- 每个后续支点不低于前一个支点;
- 每层(即矩形的每一行)至少使用一个支点;
- 每层最多使用两个支点(因 Igor 只有双手);
- 当相邻支点对应区段中心点的欧氏距离不超过 Igor 的臂展时,才能从当前支点移动到下一个支点。
Igor 的臂展为 d,这意味着当两个支点对应区段中心点的欧氏距离不超过 d 时可进行移动。区段 (i1,j1) 与 (i2,j2) 之间的距离计算公式为 (i1−i2)2+(j1−j2)2。
请计算不同有效路线的数量。若两条路线使用的支点列表或访问顺序不同,则视为不同的路线。
输入格式
每个测试包含多个测试用例。第一行包含测试用例数量 t (1≤t≤103)。接下来是测试用例描述。
每个测试用例的第一行包含三个整数 n、m、d (2≤n≤2000, 1≤m,d≤2000)。
接下来的 n 行每行包含 m 个字符 —— 描述山体各层情况。字符 '#' 表示空区段,'X' 表示含支点的区段。层数描述顺序为从上到下。
保证所有测试用例的 n⋅m 之和不超过 4⋅106。
输出格式
对于每个测试用例,输出不同路线数量对 998244353 取模后的结果。
输入输出样例
输入#1
3 3 4 1 XX#X #XX# #X#X 3 4 2 XX#X #XX# #X#X 3 1 3 X X #
输出#1
2 60 0
说明/提示
第一个样例中的可能路线:

第二个样例中 Igor 的臂展增大,因此新路线可用,例如:

第三个样例中底层没有支点,因此不存在有效路线。
翻译由 DeepSeek R1 完成
输入解题思路,AI测评打分。不知道怎么写?