注意到给的是格子上下左右的边线,上下只能帮助确定它在第几行,左右只能确定它在第几列,所以把行和列分开计算。
而给上下边线找第几行就相当于给数组相邻的两个元素,找它们在数组里出现的位置和次数。我们把数组里相邻的两个元素压成一个(比如 bi=ai×m+ai+1b_i=a_i\times m + a_{i+1}bi=ai×m+ai+1),那就是找数组元素出现位置和次数。
所以我们要求这个数组的逆数组,但是值域很大,用 std::map 或者 std::unordered_map 记录一下就可以了。
std::map
std::unordered_map
注册一个 33OJ 通用账户,您就可以在我们提供的所有在线评测服务上提交代码、参与讨论。
使用您的 33OJ 通用账户