华为OD机试-荒地-2022Q4 A卷-Py/Java/JS

祖国西北部有一片大片荒地,其中零星的分布着一些湖泊,保护区,矿区.整体上常年光照良好,但是也有一些地区光照不太好。某电力公司希望在这里建设多个光伏电站,生产清洁能源对每平方公里的土地进行了发电评估,其中不能建设的区域发电量为0kw,可以发电的区域根据光照,地形等给出了每平方公里年发电量x千瓦。我们希望能够找到其中集中的矩形区域建设电站,能够获得良好的收益.
输入描述
第一行输入为调研的地区长,宽,以及准备建设的电站【长宽相等,为正方形】的边长最低要求的发电量

之后每行为调研区域每平方公里的发电量
输出描述
输出为这样的区域有多少个

示例1:

输入
2 5 2 6
1 3 4 5 8
2 3 6 7 1

输出

4
输入说明
调研的区域大小为长2宽5的矩形,我们要建设的电站的边长为2,建设电站最低发电量为6.
输出说明

长宽为2的正方形满足发电量大于等于6的区域有4个

示例2:

输入

2 5 1 6
1 3 4 5 8
2 3 6 7 1
输出
3

Java 代码

import java.util.Scanner;
import java.util.*;
import java.util.stream.Collectors;
 
public class Main { 
    public static void main(String[] args) {
        //处理输入
        Scanner in=new Scanner(System.in); 
        List params =Arrays.stream(in.nextLine().split(" "))
                .map(Integer::parseInt)
                .collect(Collectors.toList());
        int n = params.get(0);
        int m = params.get(1);
        int c = params.get(2);
        int k = params.get(3);
 
        int[][] matrix = new int [n][m];
        for (int i=0;i= threshold)
                    ans += 1;
            }
        }
        return ans;
    }
 
}

Python代码

import functools
import copy
 
def maxSideLength(mat, threshold, c):
    m, n = len(mat), len(mat[0])
    P = [[0] * (n + 1) for _ in range(m + 1)]
    for i in range(1, m + 1):
        for j in range(1, n + 1):
            P[i][j] = P[i - 1][j] + P[i][j - 1] - P[i - 1][j - 1] + mat[i - 1][j - 1]
    
    ans = 0;
    #print (P)
    #2、遍历前缀和矩阵,获得边长等于c的矩阵
    for i in range(c,m+1):
        for j in range(c, n+1):
            #重点理解:减去点[i-c][j]和点[i][j-c]的矩阵前缀和,剩下来的为一个边长为c正方形,注意点[i-c][j-c]减了两次,需要加一个回来
            if (P[i][j] - P[i - c][j] - P[i][j - c] + P[i - c][j - c] >= threshold):
                ans += 1
 
    return ans
 
 
#处理输入
#print ( input())
 
input_params = [int(x) for x in input().split(" ")]
n=input_params[0]
m=input_params[1]
c=input_params[2]
k=input_params[3]
 
matrix = []
for i in range(n):
    matrix.append([int(x) for x in input().split(" ")])
 
print (maxSideLength(matrix, k, c))

JS代码

function main(mat,threshold,c) {
    let m = mat.length
    let n = mat[0].length
    let P = new Array(m + 1)
    for (let i=0;i= threshold){
                result += 1
            }
        }
    }
    console.log(result)
}
 
main([[1, 3, 4, 5, 8],[2, 3, 6, 7, 1]],6,2)

你可能感兴趣的:(java,javascript,开发语言)