【阿里】小红拿到了一个n行m列的矩阵

本文介绍了一道编程题目,涉及到一个n行m列的矩阵,矩阵中的0表示聚光灯,1表示人。每个聚光灯可以向四个方向照射,如果照射到人,得1分。任务是计算所有聚光灯的得分总和。解决方案是利用前缀和思想,构建行和列的前缀和数组,并详细解释了如何计算各个方向的得分。

题目描述

小红拿到了一个 nnnmmm 列的矩阵,矩阵中用 111 表示人,用 000 表示聚光灯,每个聚光灯可以朝着上、下、左、右四个方向照射(照射的距离是无穷大的),若某个方向上至少有一个人,那么小红就获得了 111 分。

小红想知道,所有的聚光灯一共可以获得多少分?

(注意:本题的输入数据较大,使用python的同学请用pypy提交,否则可能会超时!)

输入描述:

第一行两个整数 n,m(1≤n,m≤103)n, m (1\le n,m \le 10^3)n,m(1n,m10

### 处理长度为 n 的数组或表 #### 获取Python表长度示例 对于长度为 `n` 的 Python 表,可以通过内置函数 `len()` 来获取其长度。此方法适用于任何类型的序对象,包括字符串、元组以及表。 ```python my_list = [i for i in range(10)] # 创建一个包含十个元素的表 length_of_my_list = len(my_list) # 计算该表的长度 print(f"The length of the list is {length_of_my_list}") # 输出表长度 ``` 上述代码创建了一个范围从 0 至 9 的整数表,并计算了它的长度[^1]。 #### 获取NumPy数组长度 当涉及到 NumPy 库中的数组时,情况稍微复杂一些。对于不同维度的 NumPy 数组: - **一维NumPy数组**: 可以直接调用 `.size` 属性获得总元素数量; - **二维NumPy数组(矩阵)**: 如果想要知道每一/的数量,则应分别查看 shape 属性的第一个和第二个值; ```python import numpy as np one_d_array = np.array([1, 2, 3]) two_d_matrix = np.random.rand(4, 5) print(one_d_array.size) # 打印一维数组大小 print(two_d_matrix.shape[0]) # 打印二维矩阵数 print(two_d_matrix.shape[1]) # 打印二维矩阵数 ``` 这段代码展示了如何查询不同类型 NumPy 数组的具体尺寸信息。 #### 定义特定长度的MATLAB数组并填充随机唯一数值 为了满足需求,在 MATLAB 中可以先初始化一个指定长度为空白的空间,接着利用循环结构向其中填入不重复的伪随机整数直到达到预期数目为止。 ```matlab function unique_randoms = generate_unique_random(n) % 初始化一个长度为 n 的空数组 unique_randoms = zeros(1,n); while nnz(unique_randoms)<n candidate = randi([1,100],1); % 生产介于 1 和 100 之间的随机整数 if ~ismember(candidate,unique_randoms) first_empty_pos=find(isnan(unique_randoms)|unique_randoms==0,1,'first'); unique_randoms(first_empty_pos)=candidate; end end end ``` 这个函数实现了生成给定范围内无重复项的随机整数的功能[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值