#P1306. [TJOI2013] 循环格

[TJOI2013] 循环格

题目描述

一个循环格就是一个矩阵,其中所有元素为箭头,指向相邻四个格子。每个元素有一个坐标 (,)(行,列),其中左上角元素坐标为 (0,0)(0,0)。给定一个起始位 (r,c)(r,c),你可以沿着箭头方向在格子间行走。即:如果 (r,c)(r,c) 是一个左箭头,那么走到 (r,c1)(r,c-1);如果是一个右箭头,走到 (r,c+1)(r,c+1);如果是上箭头,走到 (r1,c)(r-1,c);如果是下箭头,走到 (r+1,c)(r+1,c)。每一行和每一列都是循环的,即如果走出边界,你会出现在另一侧。比如在一个 5×55 \times 5 的循环格里,从 (3,0)(3,0) 向左走会出现在 (3,4)(3,4)

一个完美的循环格是这样定义的:对于任意一个起始位置,你都可以沿着箭头最终回到起始位置。如果一个循环格不满足完美,你可以随意修改任意一个元素的箭头直到完美。例如下图,左边不是一个完美的循环格,因为只有从 (1,1),(1,2),(2,0),(2,3)(1,1),(1,2),(2,0),(2,3) 出发才会回到起始位置。通过修改其中两个箭头,可以得到右图,一个完美的循环格。

给定一个循环格,你需要计算最少需要修改多少个元素使其完美。

输入格式

第一行两个整数 RRCC,表示循环格的行和列。接下来 RR 行,每一行包含 CC 个字符 LRUD 表示左右上下。

输出格式

一个整数,表示最少需要修改多少个元素使得给定的循环格完美。

4 4
RRRD
URDD
UULD
ULLL
0
3 4
RRRD
URLL
LRRR
2

提示

30%30\% 的数据,1R,C71 ≤ R, C ≤ 7

100%100\% 的数据,1R,C151 ≤ R, C ≤ 15