Jump to: Sidebar, Content

Problem 魔术棒

This problem is a part of contest 广西师范大学附属外国语学校信息奥赛五一测试赛.

This problem has been reviewed.

Description

用过Adobe Flash的人都知道,工具栏里面有一个叫做索套的工具。它可以方便的分离图片中颜色差异较大的色块。Norman非常喜欢研究算法并且动手实现出来,于是他打算写一个简单的小程序实现魔术棒的功能。但是鉴于老师只要他出题没有要他写程序,于是他就把这个程序让给你们写啦。
为了让你们能在有限的时间里写出这样一个简单的程序,我们把问题简化:
1、图片储存里面最简单的黑白位图的储存方式(黑白位图是最简单且容易理解的图片存储方式),是用一个数字矩阵储存每个像素点的“灰度”,灰度值在0~250之间,这个值越大说明这个像素点越“黑”。
例如:一个黑白位图可以表示成这样:
111 112 113 114 222
232 15 8 11 32
2、魔术棒的使用方法是,设定某个阈值k(《现代汉语词典》:阈yù,门槛。阈值,又叫临界值,是指一个效应能够产生的最低值或最高值。),然后指定一个起始点,从这个起始点开始,向周围上、下、左、右、左上、右上、左下、右下八个相邻点进行遍历,如果这个点与起始点的灰度w差别不大于阈值,就将该点删除,即,将它的灰度设为0。然后再从这八个点出发(再分别从这些灰度为0的点出发),分别遍历还没有遍历到的相邻点,直到不能扩展(碰到边界、周围点已被扩展过、与起始点阈值差大于k)为止。最后删除指点的起始点。注意,如果某个点被遍历到,又没有被删除,则不从该点扩展遍历其周围的结点。下面给出一个范例:
| 9 9 9 8 9  | 9 9 9 8 9 | 9 9 9 0 9 |
| 9 8 8 8 9  | 9 0 0 0 9 | 9 0 0 0 9 |
| 9 8 7 8 9  | 9 0 7 0 9 | 9 0 7 0 9 |
| 9 8 8 8 9  | 9 0 0 0 9 | 9 0 0 0 9 |
| 9 9 9 9 9  | 9 9 9 9 9 | 9 9 9 9 9 |
| 7 4 7 7 7  | 7 4 7 7 7 | 7 4 7 7 7 |
(1) (2) (3)
现在我们用(x, y)来表示第x行第y列的象素点。比如(1, 1)的灰度是9,(3, 3)的灰度是7。
现在我们指定一个像素点(3, 3),给定阈值为1,然后第一步是检查它周围所有的结点,灰度全是8,与起始点7相差1,不大于阈值,于是删除掉,变成图(2)
这时候再分别从这些“0”点进行扩散,边上都是9,与起始点灰度相差2,舍弃。但右上有一个8,将它删掉。变成图(3)
这时候,已扩展过的点周围不是边界就是9,于是停止扩展。最后将起始点删掉。变成这样:
9 9 9 0 9
9 0 0 0 9
9 0 0 0 9
9 0 0 0 9
9 9 9 9 9
7 4 7 7 7
这就是最终图案的数据存储格式。但是我们最后要显示在屏幕上。于是我们规定,灰度在0~50范围内的显示“.”,51~100显示“o”,101~150显示“*”,151~200显示“#”,201~250显示“@”,对于原有的空格不显示。
151 250 250 250 151
151 151 250 151 151
151 151 250 151 151
151 151 250 151 151
151 250 250 250 151
显示的效果就是:
#@@@#
##@##
##@##
##@##
#@@@#
下面就请你编程实现这个功能。

Code Name

magicstick

Input Format (File Name: magicstick.in)

第一行两个正整数m、n,表示有一个m行n列的位图矩阵。
接下来m行,每行n个数,表示各个像素点的“灰度”。
接下来一行有一个正整数o,表示指令数。
记下来o行,每行有a,b,c三个整数,表示对点(a, b)进行一次“魔术棒”操作,阈值为c。

Output Format (File Name: magicstick.out)

首先输出一个m行n列的像素矩阵,表示修改后的图形,每个像素点用空格隔开。
然后输出一个空行。
接着输出一个m行n列的该图显示出来的图样,相素之间没有空格。

Limits

对于所有数据,m,n均不大于1000。指令数不大于100。

Comparator

合并连续空白字符

Sample Data 1

Input Data

5 5
151	250	250	250	151
151	151	250	151	151
151	151	250	151	151
151	151	250	151	151
151	250	250	250	151
2
1 1 1
1 5 1

Output Data

0	250	250	250	0
0	0	250	0	0
0	0	250	0	0
0	0	250	0	0
0	250	250	250	0

.@@@.
..@..
..@..
..@..
.@@@.

Notes

Time added: 2010-04-30 18:18:03

Time updated: 2010-05-07 12:02:11

Interactive

Discuss: 0 in total.

Solution

Contributors

vmlinuz, huangyuan

You can submit after log in