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

这篇具有很好参考价值的文章主要介绍了T2 小美的平衡矩阵(25分) - 美团编程题 & 题解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

考试平台: 牛客网

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

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

小美的平衡矩阵,大厂笔试真题题解,算法,数据结构,机试,python,美团

题目描述

小美拿到了一个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

题解

暴力枚举所有情况, 在暴力枚举的情况下使用前缀和优化检验 “是否是完美矩形区域” 的方法。文章来源地址https://www.toymoban.com/news/detail-840583.html

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))

到了这里,关于T2 小美的平衡矩阵(25分) - 美团编程题 & 题解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PTA练习4.2 平衡二叉树的根 (25 分)

    题干 将给定的一系列数字插入初始为空的AVL树,请你输出最后生成的AVL树的根结点的值。 输入格式: 输入的第一行给出一个正整数N(≤20),随后一行给出N个不同的整数,其间以空格分隔。 输出格式: 在一行中输出顺序插入上述整数到一棵初始为空的AVL树后,该树的根结点

    2023年04月08日
    浏览(19)
  • LeetCode第21~25题解

    【题目描述】 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 【示例1】 【示例2】 【示例3】 【提示】 两个链表的节点数目范围是 [0, 50] − 100 ≤ N o d e . v a l ≤ 100 -100le Node.valle 100 − 100 ≤ N o d e . v a l ≤ 100 l1 和

    2024年02月11日
    浏览(29)
  • 23.7.25 杭电暑期多校3部分题解

    题目大意 你有一个长度为 n n n 的序列,你每次可以向一个栈内放一个数,如果栈不为空并且栈顶的数大于你放的数,那么你放的数会变成栈顶的数再放入,问当栈的大小为 1 1 1 到 n n n 时分别有几种情况 解题思路 考虑dp, f i , j f_{i,j} f i , j ​ 表示放了 i i i 个数,最大的数

    2024年02月15日
    浏览(28)
  • [递归] 平衡矩阵

    题目描述 现在有一个n阶正整数方阵(n=7),现在可以对矩阵的任意一行进行左移,具体操作为:每次对于某一行a_i1,a_i2,…,a_in进行一次左移,最左边的元素移动到这一行的末尾,其他元素均向左移动一位,即变为a_i2,a_i3,…,a_in,a_i1。对某一行可以执行任意次的左移。 现在我

    2024年02月04日
    浏览(24)
  • Numpy 学习之矩阵、函数、二元运算及数组读写,差点挂在了美团三面

    sinc1 = np.vectorize(sinc) print(‘向量化:’, sinc1(x)) x = np.linspace(-10, 10, 50) plt.plot(x, sinc1(x)) plt.show() 二元运算 四则运算对应函数 | 运算符 | 对应函数 | | :-: | :-: | | a + b | add(a, b) | | a - b | subtract(a, b) | | a * b | multiply(a, b) | | a / b | divide(a, b) | | a ** b | power(a, b) | | a % b | remainder(a,b) | 比

    2024年04月15日
    浏览(34)
  • 题解 # 二维矩阵最大矩形问题#

    小明有一张N*M的方格纸,且部分小方格中涂了颜色,部分小方格还是空白。 给出N (2Ns30)和M(2sMs30)的值,及每个小方格的状态((被涂了颜色小方格用数字1表示,空白小方格用数字0表示); 请帮助小明找出最大的矩形空白区域,并输出该矩形空白区域由多少个小方格组成。 例如

    2024年02月07日
    浏览(39)
  • 力扣题解(54. 螺旋矩阵),带注释

    链接:点我

    2024年02月09日
    浏览(30)
  • 【代码练习】旋转矩阵题解思路记录分析

    给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。 不占用额外内存空间能否做到? 示例 1: 给定 matrix = [ [1,2,3], [4,5,6], [7,8,9] ], 原地旋转输入矩阵,使其变为: [ [7,4,1], [8,5,2], [9,6,3] ] 示例 2: 给定 matrix = [ [ 5, 1, 9,11], [ 2,

    2024年02月08日
    浏览(28)
  • 力扣题解(73. 矩阵置零),带注释

    链接:点我

    2024年02月09日
    浏览(25)
  • (六)【平衡小车制作】位置式PID、直立环与速度环编程

    本篇文章我将针对 位置式PID算法 、 直立环 、 速度环 等的编程进行详细的讲解,让每位小伙伴能够对这三个概念的编程逻辑有更加清晰的理解。 1.中文公式  直立环输出=Kp1×角度偏差+Kd×角度偏差的微分  // 角度偏差=真实角度-期望角度 2.英文公式  直立环PD控制器:Kp×

    2024年02月03日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包