码迷,mamicode.com
首页 > 其他好文 > 详细

poj1009 Edge Detection

时间:2015-09-04 17:08:59      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:

给一个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

 

poj1009 Edge Detection

标签:

原文地址:http://www.cnblogs.com/astoninfer/p/4781902.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!