2023华为od机试C卷【分配土地】Python实现

news2025/1/21 2:59:23

在这里插入图片描述
在这里插入图片描述

思路:

我们可以用哈希结构,此题适合用字典,键为出现的非零数字,值为列表,列表为【minrow,maxrow,minrol,maxrol]
在这里插入图片描述

import sys
def main():
    m,n = map(int,input().split())
    rects = {}
    for i in range(m):
        nums = [int(i) for i in input().split()]
        for j in range(n):
            if nums[j] > 0:
                if nums[j] not in rects:
                    rects[nums[j]]=[sys.maxsize,-sys.maxsize,sys.maxsize,-sys.maxsize]
                rects[nums[j]][0] = min(rects[nums[j]][0],i)
                rects[nums[j]][1] = max(rects[nums[j]][1],i)
                rects[nums[j]][2] = min(rects[nums[j]][2],j)
                rects[nums[j]][3] = max(rects[nums[j]][3],j)
    print(rects)
    #MaxArea = 0
    for key,value in rects.items():
        minrow = value[0]
        maxrow = value[1]
        mincol = value[2]
        maxcol = value[3]
        area = (maxrow-minrow+1)*(maxcol-mincol+1)
        print("{%d}的矩阵面积为:{%d}"%(key,area))
        
if __name__ == "__main__":
    main()

这段代码的目的是读取一个矩阵,并计算每个正整数的矩阵区域的面积。下面是对代码的详细解释:

代码结构

  1. 导入模块:

    import sys
    

    这行代码导入了 sys 模块,主要用来获取 sys.maxsize,这是 Python 中可以使用的最大整数值。

  2. 主函数:

    def main():
    
  3. 输入矩阵的维度:

    m, n = map(int, input().split())
    

    mn 分别表示矩阵的行数和列数。通过 input() 接收用户输入,并用空格分隔。

  4. 初始化字典:

    rects = {}
    

    rects 是一个字典,用于存储每个正整数在矩阵中的最小和最大行列边界。

  5. 读取矩阵数据:

    for i in range(m):
        nums = [int(i) for i in input().split()]
    

    在循环中逐行读取矩阵。nums 是当前行的整数列表。

  6. 记录每个正整数的边界:

    for j in range(n):
        if nums[j] > 0:
            if nums[j] not in rects:
                rects[nums[j]] = [sys.maxsize, -sys.maxsize, sys.maxsize, -sys.maxsize]
            rects[nums[j]][0] = min(rects[nums[j]][0], i)
            rects[nums[j]][1] = max(rects[nums[j]][1], i)
            rects[nums[j]][2] = min(rects[nums[j]][2], j)
            rects[nums[j]][3] = max(rects[nums[j]][3], j)
    
    • 对于每一个正整数 nums[j]:
      • 如果它不在 rects 字典中,则初始化边界值。
      • 更新矩阵的上下左右边界:
        • rects[nums[j]][0] 表示最小行数。
        • rects[nums[j]][1] 表示最大行数。
        • rects[nums[j]][2] 表示最小列数。
        • rects[nums[j]][3] 表示最大列数。
  7. 打印矩阵的边界字典 (调试用):

    print(rects)
    
  8. 计算并打印每个正整数的矩阵面积:

    for key, value in rects.items():
        minrow = value[0]
        maxrow = value[1]
        mincol = value[2]
        maxcol = value[3]
        area = (maxrow - minrow + 1) * (maxcol - mincol + 1)
        print("{%d}的矩阵面积为:{%d}" % (key, area))
    
    • 对于每个正整数,计算矩阵区域的面积,使用公式 (maxrow - minrow + 1) * (maxcol - mincol + 1)。这里加1是因为需要计算的是包含的行和列的数量。
  9. 主程序入口:

    if __name__ == "__main__":
        main()
    

    确保该脚本从这里开始运行。
    下面是运行的例子:
    在这里插入图片描述

总结

这段代码读取一个矩阵,分析每个正整数在矩阵中的位置,并计算出其矩阵面积。使用字典来存储每个正整数的最小和最大行列边界,最终通过计算边界差值得到面积。

理解了,我们可以改写成符合题意要求的代码

import sys
def main():
    m,n = map(int,input().split())
    rects = {}
    for i in range(m):
        nums = [int(i) for i in input().split()]
        for j in range(n):
            if nums[j] > 0:
                if nums[j] not in rects:
                    rects[nums[j]]=[sys.maxsize,-sys.maxsize,sys.maxsize,-sys.maxsize]
                rects[nums[j]][0] = min(rects[nums[j]][0],i)
                rects[nums[j]][1] = max(rects[nums[j]][1],i)
                rects[nums[j]][2] = min(rects[nums[j]][2],j)
                rects[nums[j]][3] = max(rects[nums[j]][3],j)
    MaxArea = 0
    for value in rects.values():
        minrow,maxrow,mincol,maxcol = value
        area = (maxrow-minrow+1)*(maxcol-mincol+1)
        MaxArea = max(area,MaxArea)
    print(MaxArea)
        
        
if __name__ == "__main__":
    main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1978602.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EFK之filebeat用法进阶

接上一章节:https://blog.csdn.net/weixin_46546303/article/details/140279197?spm1001.2014.3001.5501 一、filebeat module 输入流 1.filebeat module作用 Filebeat 模块的主要作用是简化日志数据的收集和处理过程。通过使用模块,你可以快速地配置…

java计算机毕设课设—网上招聘系统(附源码、文章、相关截图、部署视频)

这是什么系统? java计算机毕设课设—网上招聘系统(附源码、文章、相关截图、部署视频) 网上招聘系统的设计与实现旨在提供一个便捷、高效的在线平台,使个人求职者和公司能够有效地进行职位申请和人才招聘。该系统特别设计了两种…

Golang | Leetcode Golang题解之第318题最大单词长度乘积

题目&#xff1a; 题解&#xff1a; func maxProduct(words []string) (ans int) {masks : map[int]int{}for _, word : range words {mask : 0for _, ch : range word {mask | 1 << (ch - a)}if len(word) > masks[mask] {masks[mask] len(word)}}for x, lenX : ra…

狮子鱼 CMS ApiController.class.php SQL 注入漏洞

本章提供的所有内容仅供学习、交流和分享用途&#xff0c;只供参考。本站资源禁止并谢绝未经本站许可的使用&#xff0c;如若欲转载&#xff0c;请署名以及注明出处&#xff0c;请务必以文字链接的形式标明或保留文章原始出处和作者的信息。本站(原创)文章、资源、图片等所有内…

嵌入式全栈开发学习笔记---数据结构(顺序表)

目录 顺序结构 顺序表初始化 顺序表插入 顺序表遍历操作 顺序表前驱和后继 顺序表查找操作 顺序表删除操作 顺序表清空销毁 顺序表销毁操作 完整代码 List.c List.h Main.c 顺序表优缺点&#xff08;面试可能会考&#xff09; 上一节我们介绍了数据结构的一般概念…

【ModelSim】仿真问题记录

1、波形出不全&#xff1a; 1、甚至连clk波形都出不来 2、个别波形只有到仿真结束的时候才出现 解决办法&#xff1a; 1、添加波形需要是实例中的net 2、排查是否存在声明与示例的位宽不一致的信号 3、观察是否存在未初始化的变量寄存器 4、缩短整个仿真的步长 2、Instance列…

【HBZ分享】spring启动时自动装配的位置

自动装配流程 springboot启动时&#xff0c;自动装配逻辑在SpringBootApplication这个符合注解中的EnableAutoConfiguration新版springboot3会扫描META-INF的spring文件夹下的org.springframework.boot,autoconfigure,AutoConfiguration.imports文件&#xff0c;会把这里所有写…

FSMC--灵活的静态存储控制器

&#xff08;1&#xff09;在STM32F1系列&#xff08;及F407&#xff09;的芯片上封装了FSMC外设&#xff0c;支持拓展SARM作为RAM。 &#xff08;2&#xff09;SRAM和SDRAM的区别&#xff1a; 存储结构&#xff1a;SRAM使用锁存器、SDRAM使用电容通讯方式&#xff1a;SRAM多…

Leaf分布式ID

文章目录 系统对Id号的要求UUIDsnowflakeLeafLeaf-snowflakeLeaf-segmentMySQL自增主键segment双buffer 系统对Id号的要求 1、业务 1&#xff09;全局唯一性&#xff1a;不能出现重复的ID号&#xff0c;既然是唯一标识&#xff0c;这是最基本的要求 2&#xff09;趋势递增&a…

使用LLM(Large Language Model)进行主题建模

随着互联网技术的快速发展&#xff0c;自然语言处理&#xff08;NLP&#xff09;领域取得了显著的进步。其中&#xff0c;大型语言模型&#xff08;LLM&#xff09;在文本生成任务中表现尤为抢眼。本文旨在探讨LLM在主题建模方面的优势&#xff0c;以及如何将其应用于文本生成任…

深度图进行运算检测物体表面粗糙度

文章目录 应用场景算法原理核心代码应用场景 不同程度凹凸的零件表面粗糙度对零件的磨损产生影响,很大程度上关系到产品性能和使用寿命。不同于单独使用的产品,零件需要在装配中与其他零件相连,密封性和磨损量是厂商需要考虑的一大加工要素;其次,产品外观和触感也会影响到…

数据结构链表2(常考习题1)(C语言)

移除链表元素&#xff1a; . - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 解题思路&#xff1a; 情况1&#xff1a; 情…

【vluhub】skywalking

SkyWalking是一个开源监控平台&#xff0c;用于从服务和云原生基础设施收集、分析、聚合和可视化数据 低版本存在sql注入漏洞 访问地址 http://192.168.203.12:8080/graphql burpsuite抓数据包 替换 {"query":"query queryLogs($condition: LogQueryConditi…

安装STM32开发工具:STM32CubeMX、STM32CubeIDE、STM32CubeCLT

ST官网地址&#xff1a;https://www.st.com/content/st_com/en.html ST官网因为链接原因下载会比较慢&#xff0c;推荐使用STMCU中文官网&#xff0c;下载很通畅&#xff1a;STMCU中文官网 安装Java 在安装STM32开发软件STM32CubeMX和STM32CubeIDE、STM32CubeCTL之前&#x…

浏览器事件循环详解

1. 浏览器的进程模型 1.1. 何为进程&#xff1f; 程序运行需要有它自己的专属内存空间&#xff0c;可以把这块内存空间简单的理解为进程。 每个应用至少有一个进程&#xff0c;进程之间相互独立&#xff0c;即使要通信&#xff0c;也需要双方同意。 1.2. 何为线程&#xff1f…

【Linux】进程间通信(3):共享内存

目录 一、共享内存概述 二、共享内存相关函数 1、shmget函数 2、ftok函数 3、shmctl函数 4、 shmat函数 5、 shdt函数 三、使用共享内存相关函数管理共享内存的一般过程 1. 生成唯一的键值 2. 创建或获取共享内存段 3. 连接到共享内存段 4. 操作共享内存 5. 断开…

2024 NVIDIA开发者社区夏令营环境配置指南(Win Mac)

2024 NVIDIA开发者社区夏令营环境配置指南(Win & Mac) 1 创建Python环境 首先需要安装Miniconda&#xff1a; 大家可以根据自己的网络情况从下面的地址下载&#xff1a; miniconda官网地址&#xff1a;https://docs.conda.io/en/latest/miniconda.html 清华大学镜像地…

对提高数据和指令缓存命中率方法的验证

对于如何写出让CPU跑得更快的代码这一问题&#xff0c;我看到了两种方法&#xff0c;分别是&#xff1a;1、提高数据缓存命中率&#xff1b;2、提高指令缓存命中率。 本文对这两种方法进行了简单的验证&#xff0c;并提供了示例代码。 本文基于2.3 如何写出让 CPU 跑得更快的代…

大规模深度学习推理引擎是什么?

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 首先&#xff0c;我们来理解 “深度学习”&#xff1a;它是人工智能的一个重要分支&#xff0c;模仿人脑的神经网络结构&#xff0c;运用多层神经网络来学习和解析数据。这些神经网络能够从庞大的数据集…

二、版本更新与插件安装

版本更新 点击版本管理 点击刷新列表后点击一键更新&#xff0c;即可完成更新&#xff08;注意完成更新必须要关闭正在运行的服务&#xff09; 更新拓展&#xff08;更新插件&#xff09; 点击拓展-刷新列表-一键更新 即可 注意&#xff1a;操作完成以后必须重新启动方可生效…