路径求和问题
题目描述
有一个 n 行 m 列的网格。网格里的每个格子都写着一个整数,其中第 i 行第 j 列的格子里写着整数 ai,j。
令 (i,j) 表示位于第 i 行第 j 列的格子。你现在需要从 (1,1) 出发并前往 (n,m)。当位于格子 (i,j) 时,可以选择走到右方的格子 (i,j+1)(若 j<m),也可以选择走到下方的格子 (i+1,j)(若 i<n)。
令 S 表示路径上每个格子里的整数形成的集合,包括 a1,1 和 an,m。路径的价值定义为 S 中元素的数量(集合中不包含重复元素)。对于所有可能的路径,求它们的价值之和。
由于答案可能很大,请将答案对 998244353 取模后输出。
输入格式
有多组测试数据。第一行输入一个整数 T(1≤T≤103)表示测试数据组数。
对于每组测试数据:
- 第一行输入两个整数 n 和 m(1≤n,m≤2×105,1≤n×m≤2×105),表示网格的行数和列数。
- 接下来 n 行,第 i 行输入 m 个整数 ai,1,ai,2,⋯,ai,m(1≤ai,j≤n×m),其中 ai,j 表示格子 (i,j) 里的整数。
保证所有数据 n×m 之和不超过 2×105。
输出格式
每组数据输出一行一个整数,表示所有可能的路径的价值之和对 998244353 取模后的结果。
样例 #1
样例输入 #1
3
2 3
5 2 1
1 5 5
1 1
1
2 3
3 3 3
3 3 3
样例输出 #1
7
1
3
样例 #1 解释
对于第一组样例数据,有 3 条可能的路径:
- 第一条路径是 (1,1)→(1,2)→(1,3)→(2,3),S={1,2,5},价值为 3;
- 第二条路径是 (1,1)→(1,2)→(2,2)→(2,3),S={2,5},价值为 2;
- 第三条路径是 (1,1)→(2,1)→(2,2)→(2,3),S={1,5},价值为 2。
所以答案是 3+2+2=7。
第二组数据只有一个格子,唯一的路径价值为 1。
第三组数据所有格子都是 3,每条路径的价值都是 1,共 3 条路径,答案为 3。
数据范围与子任务
| 子任务 |
测试点 |
特殊性质 |
| 1 |
1~4 |
n,m≤10 |
| 2 |
5~10 |
n×m≤5000 |
| 3 |
11~14 |
n×m≤2×105,每个数字出现次数 ≤2 |
| 4 |
15~18 |
n×m≤2×105,出现数字种类数 ≤100 |
| 5 |
19~25 |
无特殊限制 |
对于所有数据:1≤n,m≤2×105,1≤n×m≤2×105,1≤ai,j≤n×m,∑(n×m)≤2×105。