T2 小美的平衡矩阵(25分) - 美团编程题 & 题解

考试平台: 牛客网

题目类型: 30道单选题(60分)+ 2 道编程题 (15分 + 25分)

考试时间: 2024-03-09 (两小时)

题目描述

小美拿到了一个n*n的矩阵,其中每个元素是 0 或者 1。
小美认为一个矩形区域是完美的,当且仅当该区域内 0 的数量恰好等于 1 的数量。
现在,小美希望你回答有多少个i*i的完美矩形区域。你需要回答 1 ≤ i ≤ n 1\leq i \leq n 1in的所有答案。

输入描述

第一行输入一个正整数n ,代表矩阵大小。
接下来的n行,每行输入一个长度为n的 01 串,用来表示矩阵。
1 ≤ n ≤ 200 1\leq n \leq 200 1n200

输出描述

输出n行,第i行输出 i*i的完美矩形区域的数量。

示例

输入:
4
1010
0101
1100
0011

输出:
0
7
0
1

题解

暴力枚举所有情况, 在暴力枚举的情况下使用前缀和优化检验 “是否是完美矩形区域” 的方法。

from collections import defaultdict

n = int(input())

grid = [input() for _ in range(n)]

# 前缀和 psum[r][i] 表示 grid[r][0:i] 中 “1” 的个数
psum = [[0] * (n+1) for _ in range(n)]
for r in range(n):
    for i, v in enumerate(grid[r]):
        if v == "1":
            psum[r][i+1] = psum[r][i] + 1
        else:
            psum[r][i+1] = psum[r][i]
        

def check(r, c, w) -> bool:
    """
    检验左上角为 (r,c) 宽度为 w 的是否是完美矩形区域
    """
    global n, grid, psum
    if r + w > n or c + w > n:
        return False

    # 统计矩形区域内 1 的数量
    cnt = 0
    for rc in range(w):
        cnt += psum[r + rc][c + w] - psum[r + rc][c]
	
    # 如果 1 的数据和0的数量相同则,  cnt * 2 == w * w
    return cnt * 2 == w * w


cnt = defaultdict(dict)

# 暴力枚举所有的情况
for r in range(n):
    for c in range(n):
        for w in range(2, n + 1): # 枚举举行宽度
            if check(r, c, w):
                cnt[w] = cnt.get(w, 0) + 1

# 打印结果输出
for i in range(1, n + 1):
    print(cnt.get(i, 0))

相关推荐

  1. 大厂笔试真讲解—23蛋糕切割

    2024-03-10 07:52:02       29 阅读
  2. 平衡矩阵_dp思路

    2024-03-10 07:52:02       37 阅读
  3. 20240309笔试算法数组询问

    2024-03-10 07:52:02       43 阅读
  4. 【面经】3月29/平台/后端/一面/1h

    2024-03-10 07:52:02       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-10 07:52:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-10 07:52:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-10 07:52:02       82 阅读
  4. Python语言-面向对象

    2024-03-10 07:52:02       91 阅读

热门阅读

  1. 利用GPT开发应用005:Codex、Turbo、ChatGPT、GPT-4

    2024-03-10 07:52:02       60 阅读
  2. Python与HTTP服务交互

    2024-03-10 07:52:02       43 阅读
  3. ConcurrentHashMap 底层原理和JDK版本对比

    2024-03-10 07:52:02       39 阅读
  4. [axios]使用指南

    2024-03-10 07:52:02       44 阅读
  5. 【Vue3 组合式 API: reactive 和 ref 函数】

    2024-03-10 07:52:02       43 阅读
  6. 【conda】conda卸载并重新安装指定版本软件package

    2024-03-10 07:52:02       44 阅读
  7. 用C语言easyx 做一个《正弦彩环》

    2024-03-10 07:52:02       41 阅读
  8. python知网爬虫论文pdf下载+立即可用(动态爬虫)

    2024-03-10 07:52:02       39 阅读
  9. PHP端口批量查询工具单文件

    2024-03-10 07:52:02       46 阅读
  10. 动态SLAM论文阅读笔记

    2024-03-10 07:52:02       51 阅读