给一个n * m的矩阵(n * m ≤ 1e9, m ≤ 1e9)A, 求矩阵A‘。
定义A‘(i, j) = max(abs(A(i, j) - A(u, v))), 其中(u, v)在矩阵内同时在以(i, j)为中心的九宫格范围内。
考虑到矩阵大小,当然不是按照传统方式呈现矩阵,而是用一种流程编码(RLE)的编码方式表示。
编码方式题目已经交代的很清楚了。
看似很棘手的一个题目,对于如此大的数据量感觉似乎无从下手。
注意到题目说明pair数不会超过1e3。
也就是说,相连的重复数字是很多的,这是本题能够被解决的先决条件。
我们定义A(i, j)的位置是(i * width + j)(i, j从0开始)。
我们定义当前pair(i)的最小位置为f(i)。
如果能够知道A‘中所有pair的f值,答案即可得到。
然而准确找到所有pair的位置(不重不漏)是困难的,但是找到它们出现的可能位置(允许冗余)则是可行的。
我们断言:A‘中所有pair的f值对应的位置(简记为突变位置)一定在以A中某个突变位置为中心的九宫格范围内。
画图易得反证,此略过。
这样我们找到所有伪命中点最后再处理一下(去重)就行了,具体实现见代码。
http://poj.org/problem?id=1009
时间: 2024-11-10 09:53:51