当设计图中有一方块颜色的面积为 L×L 时,我们将用一整块边长为 L 的正方形瓷砖来填充,而不会选用较小的同色瓷砖来拼接。此外,为了避免多解的情况,我们规定必须按照从上到下、从左到右的顺序贴瓷砖(参见样例解释),瓷砖不可重叠,并且要求每一步选用的瓷砖的面积尽可能大。 输入格式: 输入首先在第一行中给出两个不超过 10 3 的正整数 N 和 M,对应整面墙的高和宽。随后 N 行,每行给出 M 个字符,对应这一行的颜色分布。 输出格式: 首先在第一行输出不同瓷砖的种类数 K。随后 K 行,每行按格式 color = C; size = L; amount = T 输出一种瓷砖的信息。其中 C 是表示颜色的字符,L 是正方形的边长,T 是这种瓷砖需要的数量。 瓷砖按照其颜色的升序输出,同色的瓷砖按照其边长的升序输出。 输入样例: 6 6 aaadee aacbee deccda caccbe ddecbb ddadbb 输出样例: 10 color = a; size = 1; amount = 4 color = a; size = 2; amount = 1 color = b; size = 1; amount = 2 color = b; size = 2; amount = 1 color = c; size = 1; amount = 3 color = c; size = 2; amount = 1 color = d; size = 1; amount = 4 color = d; size = 2; amount = 1 color = e; size = 1; amount = 3 color = e; size = 2; amount = 1
时间: 2024-02-17 19:05:12 浏览: 116
```python
n, m = map(int, input().split())
wall = [list(input().strip()) for _ in range(n)]
# 判断当前位置是否可用
def is_valid(x, y, color):
return x >= 0 and x < n and y >= 0 and y < m and wall[x][y] == color
# DFS搜索
def dfs(x, y, color):
cnt = 1
wall[x][y] = '#' # 将已经搜索的位置标记为 #
# 向四个方向搜索
if is_valid(x+1, y, color):
cnt += dfs(x+1, y, color)
if is_valid(x, y+1, color):
cnt += dfs(x, y+1, color)
if is_valid(x-1, y, color):
cnt += dfs(x-1, y, color)
if is_valid(x, y-1, color):
cnt += dfs(x, y-1, color)
return cnt
tiles = []
for i in range(n):
for j in range(m):
if wall[i][j] != '#':
color = wall[i][j]
cnt = dfs(i, j, color)
# 将已经搜索的面积转化成瓷砖的大小
size = int(cnt ** 0.5)
if size * size < cnt:
size += 1
tiles.append((color, size))
# 对瓷砖列表按照颜色和大小进行排序
tiles.sort()
# 输出结果
print(len(tiles))
for color, size in tiles:
amount = sum(1 for c, s in tiles if c == color and s == size)
print(f'color = {color}; size = {size}; amount = {amount}')
```
阅读全文