#L3148. [USACO16OPEN] Bull in a China Shop P

    ID: 840 传统题 文件IO:bcs 1000ms 256MiB 尝试: 0 已通过: 0 难度: (无) 上传者: 标签>模拟二分哈希 hashing前缀和USACO2016O2优化

[USACO16OPEN] Bull in a China Shop P

P3148 [USACO16OPEN] Bull in a China Shop P

题目描述

Farmer John 决定给他的家增添一些装饰。在当地的瓷器店里,他发现了一尊精致的玻璃牛雕像,决定购买它,因为它完美地适合放在壁炉上方的壁炉架上。

牛雕像的形状由一个 N×MN \times M 的字符网格描述(3N,M5003 \leq N, M \leq 500),其中小写字母字符代表雕像的各个部分(表示不同的颜色),而 '.' 字符则不代表雕像部分。

...............
...............
x..x...........
xxxx...........
xxxxaaaaaaa...
.xx.aaaaaaaaa..
....aaaaaaa.aa.
....ll...ll....
....vv...vv....
...............

不幸的是,就在 FJ 准备购买之前,一头公牛冲进了商店,不仅撞碎了 FJ 的雕像,还撞碎了许多其他货架上的玻璃制品!FJ 的雕像碎成了 3 块,并迅速混入了地上的 KK 块碎片中(4K1004 \leq K \leq 100)。每一块碎片都由一个字符网格描述,就像原来的雕像一样。

请帮助 FJ 确定有多少组 3 块碎片(地上的 KK 块中)可以粘合在一起修复他破碎的雕像。

地上的碎片可能被垂直或水平翻转,或者旋转了 90 度的倍数。因此,给定原始网格以及描述碎片的 KK 个网格,你需要找到可以组合成原始图片的 3 块碎片,允许碎片被平移、翻转或旋转 90 度的倍数。当这 3 块碎片叠加在一起时,它们应该准确地形成原始图片,且原始图片中的每个彩色方块都恰好出现在一块碎片中。

输入格式

第一行包含一个整数 KK。接下来是 K+1K + 1 个碎片的描述。第一个描述是原始玻璃牛的描述,接下来的 KK 个描述是破碎的碎片。

每个描述以两个整数 RRCC1R,C1001 \le R, C \le 100)开始。接下来的 RR 行包含 CC 个小写字母字符,描述每个单元格的颜色。每块碎片在水平/垂直方向上都是连通的,并且至少有一个非空单元格。

输出格式

输出满足条件的三元组 i,j,ki, j, ki<j<ki < j < k)的数量,使得碎片 iijjkk 可以排列成原始玻璃牛。

输入输出样例 1

5
5 5
aaaaa
..a..
bbabb
..a..
aaaaa
3 5
..abb
..a..
aaaaa
5 2
a.
a.
aa
a.
a.
1 2
bb
1 5
bbabb
2 5
aaaaa
..a..
3

说明/提示

三个解决方案使用了碎片 (0,1,2)(0, 1, 2)(0,2,4)(0, 2, 4)(1,3,4)(1, 3, 4)

请注意,这个问题每个测试用例的时间限制为 6 秒(Java 和 Python 提交的时间限制为 12 秒)。