loj#P6852. 「ICPC World Finals 2021」晶体侧风
「ICPC World Finals 2021」晶体侧风
题目描述
你是一个科学团队的成员,正在开发一种在分子水平上晶体结构成像的新技术。该技术中以不同的角度在晶体表面吹出非常细微的风,以检测边界(由暴露在风中的分子表示)。在不同的风向下重复这一过程,并记录每个方向上观测到的边界。你的团队收集了大量的数据,但是就像应用科学经常发生的那样,现在真正的工作,即分析,必须开始。
对于一个给定的晶体,你将得到风吹过表面的方向,以及每个方向的风所遇到的所有边界的位置。对于风向为 的风,边界被定义为一个位置 ,满足一个分子处于 ,并且没有分子处于 。注意由于技术原因, 和 未必互质。
数据不一定唯一确定了晶体结构。你必须找到两个唯一确定且分子数最少和最多的结构符合观察数据。
输入格式
输入第一行包含三个整数 和 ,其中 和 表示晶体结构的最大范围, 是在晶体表面吹风的次数。
接下来 行,每行描述一次吹风得到的数据。每行开头两个整数 和 (不同时为零)表示风向,接下来一个整数 表示这次吹风探测到的边界数。然后给出互不相同的 对整数 和 ,表示观测到的边界。
你可以假设总存在至少一种晶体满足输入的条件,并且不存在在给定范围之外的晶体。
输出格式
输出两个文本化描述的晶体,两个晶体之间用一个空行隔开。每个结构包含 行,每行 个字符,左上角表示位置 。第一个结构是分子数最少且符合观察数据的晶体,第二个是分子数最多且符合观察数据的晶体。如果该位置存在分子,则输出 #
,否则输出 .
。
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
#..#.
.#..#
.#...
..###
##.##
.##.#
.###.
..###