SP16018 MCU20E - Edge Detection

题目描述

IONU 卫星成像公司通过游程编码(RLE)来记录和存储超大图像。你的任务是编写一个程序,读取这些已经压缩的图像,进行边缘检测,并输出一个新的压缩图像,其中只显示检测到的边缘。 一种简单的边缘检测方法是:对每个输出像素,计算它与输入图像中所有相邻像素差值的绝对值,并取其中最大值作为该像素的值。例如,考虑下图中的输入图像: ![](http://acm.tju.edu.cn/toj/1914_edge1.gif)![](http://acm.tju.edu.cn/toj/1914_edge2.gif) 在输出图像中,左上角像素的值是 |15-15|, |15-100| 和 |15-100| 之间的最大值,即 85。而第 4 行,第 2 列的像素值是 |175-100|, |175-100|, |175-100|, |175-175|, |175-25|, |175-175|, |175-175| 和 |175-25| 中的最大值,即 150。 图像中像素总数在 2 到 $10^9$ 之间。所有图像都通过游程编码来表示,也即是一系列由像素值(0-255)和对应长度(1-$10^9$)组成的对。输入图像最多有 1,000 对这样的值对,并且相邻的值对不会有相同的像素值。图像每行的像素数量是固定的。 输入数据包含一个或多个图像的信息。每幅图像的信息以它每行的像素宽度作为开始,接着是一系列 RLE 对,每行一个。在读到 "0 0" 时,表示该图像数据结束。当图像的宽度为 0 时,表示没有更多的图像需要处理。示例输入中的第一个图像描述了一个 5x7 的输入图像。 输出是对每幅图像进行边缘检测后的结果,格式和输入相同,只是结果可能包含超过 1,000 个 RLE 对。 **注意:** 尝试对每一个像素逐一进行输出计算的简单粗暴方法,可能会因为时间或空间限制而失败。 ### 样例输入 ``` 7 15 4 100 15 25 2 175 2 25 5 175 2 25 5 0 0 10 35 500000000 200 500000000 0 0 3 255 1 10 1 255 2 10 1 255 2 10 1 255 1 0 0 0 ``` ### 样例输出 ``` 7 85 5 0 2 85 5 75 10 150 2 75 3 0 2 150 2 0 4 0 0 10 0 499999990 165 20 0 499999990 0 0 3 245 9 0 0 0 ```

输入格式

- 每幅图像首先给出一行,表示每行的像素宽度。 - 接下来是若干行,每行包含两个整数,分别为像素值和连续像素的长度。 - 用 "0 0" 结束一幅图像的数据。 - 当图像宽度为 0 时,表示输入结束。

输出格式

对于每幅输入图像,输出经过边缘检测处理后的图像。输出格式与输入格式一致,但结果可能包含超过 1,000 个 RLE 对。

说明/提示

- 每行像素宽度:2 ≤ W ≤ $10^9$ - 图像中像素总数:2 ≤ N ≤ $10^9$ - 每幅图像最多包含 1,000 个 RLE 对 - 像素值:0 ≤ V ≤ 255 - 像素连续长度:1 ≤ L ≤ $10^9$ **本翻译由 AI 自动生成**