首页 > 试题广场 >

涂棋盘

[编程题]涂棋盘
  • 热度指数:2608 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
小易有一块n*n的棋盘,棋盘的每一个格子都为黑色或者白色,小易现在要用他喜欢的红色去涂画棋盘。小易会找出棋盘中某一列中拥有相同颜色的最大的区域去涂画,帮助小易算算他会涂画多少个棋格。

输入描述:
输入数据包括n+1行:
第一行为一个整数n(1 ≤ n ≤ 50),即棋盘的大小
接下来的n行每行一个字符串表示第i行棋盘的颜色,'W'表示白色,'B'表示黑色


输出描述:
输出小易会涂画的区域大小
示例1

输入

3 BWW BBB BWB

输出

3
n, *bw = open(0).read().split()
n = int(n)


def lamp(grid):
    B = [1 if i == 'B' else 0 for i in grid[0]]
    W = [1 if i == 'W' else 0 for i in grid[0]]
    m = max(max(B), max(W))
    for j in range(1, n):
        tb = [1 if i == 'B' else 0 for i in grid[j]]
        tw = [1 if i == 'W' else 0 for i in grid[j]]
        B = [B[i] + 1 if tb[i] == 1 else 0 for i in range(n)]
        W = [W[i] + 1 if tw[i] == 1 else 0 for i in range(n)]
        m = max(m, max(B), max(W))
    return m


print(max(lamp(bw), lamp(list(zip(*bw)))))  # 才发现题目只需要看列就行了。。。
python的特色zip不能不用,如果有numpy这题可以写的更优美点
编辑于 2020-07-21 17:32:34 回复(0)