迷宫
You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.
[丛雨]来到了一个迷宫,这个迷宫是一个 的网格,第 第 列的格子会包含一个方向指示 和一个权值 。假设起点为格子 (即第 行第 列的格子),一开始丛雨左脚踏入格子 ,分数加上 ,然后该格子的权值变为它的相反数 。之后有两种选择:
(1)结束游戏,当前分数为最终分数。
(2)按照当前格子的方向指示走到下一个格子 。如果踏入当前格子的是左脚,则右脚踏入 ,并且分数减去 ;如果踏入当前格子的是右脚,则左脚踏入 ,分数加上 。之后 变为它的相反数 。然后继续做下一个选择。
注意,必须存在下一个格子才能选择 ,否则只能选择 。
具体的下一个格子的定义如下:
格子的方向指示由^
v
<
>
四个字符表示,假设当前格子为 ,
如果 ^
,则表示往上走,即下一个格子为 ;
如果 v
,则表示往下走,即下一个格子为 ;
如果 <
,则表示往左走,即下一个格子为 ;
如果 >
,则表示往右走,即下一个格子为 ;
如果格子 的下一个格子 不满足 且 ,那么认为格子 不存在下一个格子。
丛雨的初始分数为 ,她想知道,对于每个 作为起点,她能得到的最高的最终分数是多少。由于她不想输出文件太大,假设对于每个 ,答案为 ,那么你只需要输出
其中 , 。如果以某个 为起点,能得到比任意正整数大的最终分数,则令 。
输入格式(maze.in)
第一行,两个正整数 , ,以空格相隔。 接下来 行,第 行是字符串 ,其第 个字符 表示第 行第 列格子的方向指示。 接下来 行,第 行 个整数 ,以空格相隔, 表示第 行第 列格子的初始权值。
输出格式(maze.out)
输出一个整数,表示答案。
输入样例
3 3
><>
>vv
^<<
1 2 3
4 5 6
7 8 9
输出样例
3946712175731523781
样例解释
对应的答案为
1 2 3
7 5 6
8 8 17
数据范围
对于 的数据,满足 。
对于 的数据,满足 。
对于 的数据,满足 。
注意:由于答案可能较大,对于C/C++语言,你可能需要使用 long long
数据类型进行计算。在输出答案时,可能不需要实际的取模,只需要使用unsigned long long
数据类型的自然溢出即可。
0724
- Status
- Done
- Rule
- IOI
- Problem
- 4
- Start at
- 2024-7-24 9:00
- End at
- 2024-7-24 12:30
- Duration
- 3.5 hour(s)
- Host
- Partic.
- 29