loj#P6852. 「ICPC World Finals 2021」晶体侧风

「ICPC World Finals 2021」晶体侧风

题目描述

你是一个科学团队的成员,正在开发一种在分子水平上晶体结构成像的新技术。该技术中以不同的角度在晶体表面吹出非常细微的风,以检测边界(由暴露在风中的分子表示)。在不同的风向下重复这一过程,并记录每个方向上观测到的边界。你的团队收集了大量的数据,但是就像应用科学经常发生的那样,现在真正的工作,即分析,必须开始。

对于一个给定的晶体,你将得到风吹过表面的方向,以及每个方向的风所遇到的所有边界的位置。对于风向为 (wx,wy)(w_x,w_y) 的风,边界被定义为一个位置 (x,y)(x,y),满足一个分子处于 (x,y)(x,y),并且没有分子处于 (xwx,ywy)(x-w_x,y-w_y)。注意由于技术原因,wxw_xwyw_y 未必互质。

数据不一定唯一确定了晶体结构。你必须找到两个唯一确定且分子数最少和最多的结构符合观察数据。

输入格式

输入第一行包含三个整数 dx,dyd_x,d_ykk,其中 dxd_xdy (1dx,dy103)d_y\ (1\le d_x,d_y\le 10^3) 表示晶体结构的最大范围,k (1k10)k\ (1\le k\le 10) 是在晶体表面吹风的次数。

接下来 kk 行,每行描述一次吹风得到的数据。每行开头两个整数 wx (dxwxdx)w_x\ (-d_x\le w_x\le d_x)wy (dywydy)w_y\ (-d_y\le w_y\le d_y)(不同时为零)表示风向,接下来一个整数 b (0b105)b\ (0\le b\le 10^5) 表示这次吹风探测到的边界数。然后给出互不相同的 bb 对整数 xxy (1xdx,1ydy)y\ (1\le x\le d_x,1\le y\le d_y),表示观测到的边界。

你可以假设总存在至少一种晶体满足输入的条件,并且不存在在给定范围之外的晶体。

输出格式

输出两个文本化描述的晶体,两个晶体之间用一个空行隔开。每个结构包含 dyd_y 行,每行 dxd_x 个字符,左上角表示位置 (1,1)(1,1)。第一个结构是分子数最少且符合观察数据的晶体,第二个是分子数最多且符合观察数据的晶体。如果该位置存在分子,则输出 #,否则输出 .

6 6 3
1 1 3 3 1 1 3 2 2
0 2 6 3 1 1 3 2 2 6 4 5 3 4 2
1 -1 4 1 3 2 4 3 5 4 6

..#...
.#.#..
#.#.#.
.#.#.#
..#.#.
...#..

..#...
.#.#..
#.#.#.
.#.#.#
..#.#.
...#..

5 4 2
1 0 6 1 1 4 1 2 2 5 2 2 3 3 4
0 -1 7 1 1 4 1 5 2 2 3 3 4 4 4 5 4

#..#.
.#..#
.#...
..###

##.##
.##.#
.###.
..###