#5005. [USACO16OPEN] Broken Cow Figurine B

[USACO16OPEN] Broken Cow Figurine B

题目描述

农夫约翰想为家中添置装饰,在瓷器店发现了一个精致的玻璃牛雕像。这个雕像可以用N×N的字符网格表示(3 ≤ N ≤ 8),其中'#'表示雕像部分,'.'表示空白。

不幸的是,一头公牛冲进商店打碎了约翰的雕像,使其断裂成2块,并混在了地上的K个碎片中(3 ≤ K ≤ 10)。每个碎片也用N×N网格表示。

请帮助约翰找出哪两个碎片可以拼回原来的雕像。注意:

  1. 碎片未被旋转或翻转,只需平移(上下左右移动)
  2. 两个碎片平移后叠加必须精确重构原雕像
  3. 每个'#'必须来自其中一个碎片,不能重叠
  4. 移动时整个碎片必须保持在原N×N网格范围内

输入格式

第一行:N和K

接下来N行:原雕像的网格

随后K×N行:K个碎片的网格(每个碎片占N行)

输出格式

一行两个整数,表示组成原雕像的两个碎片编号(按升序排列)

输入输出样例

输入 #1

4 3
####
#..#
#.##
....
.#..
.#..
##..
....
####
##..
#..#
####
....
.###
.#..
.#..

输出 #1

1 3

样例解释

原雕像:

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

三个碎片:

  1. 碎片1:
.#..
.#..
##..
....
  1. 碎片2:
####
##..
#..#
####
  1. 碎片3:
....
.###
.#..
.#..

碎片1和3可以组合成原雕像:

  • 碎片1右移1格,下移0格
  • 碎片3左移1格,上移1格 组合后完全匹配原雕像形状