光伏场地建设规划 - 华为OD统一考试(E卷)

2024华为OD机试(C卷+D卷+E卷)最新题库【超值优惠】Java/Python/C++合集

华为od机试

题目描述

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

输入描述

第一行输入为调研的地区长,宽,以及准备建设的电站【长宽相等,为正方形】的边长,最低要求的发电量
之后每行为调研区域每平方公里的发电量
例如,输入为:
2 5 2 6
1 3 4 5 8
2 3 6 7 1
表示调研的区域大小为长2宽5的矩形,我们要建设的电站的边长为2,建设电站最低发电量为6

输出描述

输出为这样的区域有多少个
上述输入长宽为2的正方形满足发电量大于等于6的区域有4个。
则输出为:
4

示例1

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

输出:
4

说明:
输入长为2,宽为5的场地,建设的场地为正方形场地,边长为2,要求场地的发电量大于等于6

示例2

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

输出:
3

说明:
输入长为2,宽为5的场地,建设的场地为正方形场地,边长为1,要求场地的发电量大于等于6

示例3

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

输出:
10

说明:
输入长为2,宽为5的场地,建设的场地为正方形场地,边长为1,要求场地的发电量大于等于0即可

题解

题目分析

这道题目要求我们在给定的调研区域中找到可以满足条件的矩形区域,这些矩形区域的边长固定,且需要发电量大于等于给定的阈值。题目提到我们可以利用前缀和来加速计算,因此我们可以通过构建二维前缀和来快速得到每个正方形区域的发电量和,从而判断是否满足要求。

代码解析

代码中使用了二维前缀和的思想,步骤具体如下:

  1. 读取输入
  • 从输入中首先读取矩形的长、宽,正方形电站的边长 B 和最低发电量要求 MIN。接着读取每个点的发电量,并将其存入二维数组 a 中。
  1. 构建二维前缀和数组

    • 通过双层循环来构建二维前缀和数组 sum,并利用公式:

      sum[i+1][j+1]=sum[i+1][j]+sum[i][j+1]−sum[i][j]+a[i][j]
      

      这样就能快速计算出任意子矩形的和。

  2. 遍历所有可能的左上角

  • 通过两层循环遍历矩形区域的每个可能的左上角 (r1, c1),然后根据当前的正方形边长 B 计算出右下角 (r2, c2),判断该区域是否满足发电量要求。
  1. 计数结果并输出

    • 如果某个区域的发电量和大于等于 MIN,就将计数器 result 加 1。最后输出满足条件的区域个数。

复杂度分析

  • 时间复杂度:构建二维前缀和的时间复杂度是 O(Length * Width),然后计算每个正方形区域和的时间复杂度是 O(Length * Width)。因此,整个算法的时间复杂度是 O(Length * Width),可以处理较大的数据规模。

  • 空间复杂度:我们额外使用了一个大小为 (Length + 1) * (Width + 1) 的二维前缀和数组,因此空间复杂度是 O(Length * Width)。

总结

本题通过二维前缀和来快速计算任意矩形区域的发电量和,并根据发电量和的大小来判断是否满足条件。使用前缀和大大优化了子矩形的求和效率,使得时间复杂度从 O(n^4) 降到了 O(n^2),可以处理较大的数据规模。

二维前缀和

Java

import java.util.Scanner;

/**
 * @author code5bug
 */
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 地区长,宽
        int Length = sc.nextInt(), Width = sc.nextInt();
        // 准备建设的电站的边长, 最低要求的发电量
        int B = sc.nextInt(), MIN = sc.nextInt();

        int[][] a = new int[Length][Width];

        // 二维前缀和数组
        int[][] sum = new int[Length + 1][Width + 1];
        for (int i = 0; i < Length; i++) {
            for (int j = 0; j < Width; j++) {
                a[i][j] = sc.nextInt();
                sum[i + 1][j + 1] = sum[i + 1][j] + sum[i][j + 1] - sum[i][j] + a[i][j];
            }
        }

        int result = 0;
        for (int r1 = 0; r1 < Length; r1++) {
            for (int c1 = 0; c1 < Width; c1++) {
                int r2 = r1 + B, c2 = c1 + B;
                if (r2 > Length || c2 > Width) continue;
                if (sum[r2][c2] - sum[r2][c1] - sum[r1][c2] + sum[r1][c1] >= MIN) result++;
            }
        }

        System.out.println(result);
    }
}

Python

# 输入
Length, Width, B, MIN = map(int, input().split())

# 初始化二维数组
a = [list(map(int, input().split())) for _ in range(Length)]

# 二维前缀和数组
sum = [[0] * (Width + 1) for _ in range(Length + 1)]

# 计算前缀和
for i in range(Length):
    for j in range(Width):
        sum[i + 1][j + 1] = sum[i + 1][j] + sum[i][j + 1] - sum[i][j] + a[i][j]

result = 0

# 遍历每个左上角位置,计算是否符合条件
for r1 in range(Length):
    for c1 in range(Width):
        r2 = r1 + B
        c2 = c1 + B
        if r2 > Length or c2 > Width:
            continue
        if sum[r2][c2] - sum[r2][c1] - sum[r1][c2] + sum[r1][c1] >= MIN:
            result += 1

# 输出结果
print(result)

C++

#include <iostream>
#include <vector>

using namespace std;

int main() {
    // 输入地区的长和宽
    int Length, Width;
    // 输入电站的边长和最低要求的发电量
    int B, MIN;
    cin >> Length >> Width >> B >> MIN;

    // 初始化二维数组
    vector<vector<int>> a(Length, vector<int>(Width));

    // 二维前缀和数组
    vector<vector<int>> sum(Length + 1, vector<int>(Width + 1, 0));

    // 输入二维数组并计算前缀和
    for (int i = 0; i < Length; i++) {
        for (int j = 0; j < Width; j++) {
            cin >> a[i][j];
            sum[i + 1][j + 1] = sum[i + 1][j] + sum[i][j + 1] - sum[i][j] + a[i][j];
        }
    }

    int result = 0;
    // 遍历每个左上角位置,计算是否符合条件
    for (int r1 = 0; r1 < Length; r1++) {
        for (int c1 = 0; c1 < Width; c1++) {
            int r2 = r1 + B, c2 = c1 + B;
            if (r2 > Length || c2 > Width) continue;  // 边界检查
            // 计算子矩阵的和并检查是否大于等于最低要求
            if (sum[r2][c2] - sum[r2][c1] - sum[r1][c2] + sum[r1][c1] >= MIN) {
                result++;
            }
        }
    }

    // 输出结果
    cout << result << endl;

    return 0;
}

相关练习题

题号题目难易
LeetCode 304304. 二维区域和检索 - 矩阵不可变中等

整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++中模板的初级使用函数模板(刚刚接触模板概念的小白也能明白)

文章目录 模板分类函数模板函数模板的原理函数模板基本语法 —— typename 以及 class简单的函数模板多类型模板参数class 和 typename 的选择类模板 模板分类 模板的核心思想是让编译器在编译时生成适用于具体类型的代码&#xff0c;这个过程称为模板实例化。C 中的模板分为两…

Sublime Text 3 相关设置

打开设置 { “font_size”: 16, // 字体大小 “save_on_focus_lost”: true, // 自动保存 }

射击靶标检测系统源码分享

射击靶标检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

【吊打面试官系列-MySQL面试题】LIKE 声明中的%和_是什么意思?

大家好&#xff0c;我是锋哥。今天分享关于【LIKE 声明中的&#xff05;和_是什么意思&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; LIKE 声明中的&#xff05;和_是什么意思&#xff1f; &#xff05;对应于 0 个或更多字符&#xff0c;_只是 LIKE 语句中的…

Amazon Bedrock 模型微调实践(二):数据准备篇

本博客内容翻译自作者于 2024 年 9 月在亚马逊云科技开发者社区发表的同名博客&#xff1a; “Mastering Amazon Bedrock Custom Models Fine-tuning (Part 2): Data Preparation for Fine-tuning” 亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、…

Leetcode—322. 零钱兑换【中等】(memset(dp,0x3f, sizeof(dp))

2024每日刷题&#xff08;159&#xff09; Leetcode—322. 零钱兑换 算法思想 dp实现代码 class Solution { public:int coinChange(vector<int>& coins, int amount) {int m coins.size();int n amount;int dp[m 1][n 1];memset(dp, 0x3f, sizeof(dp));dp[0][…

Django ORM(多表)

文章目录 前言一、关联关系模型二、一对多写入数据二、多对多写入数据二、跨表查询1.查找test 标签的文章2.查找作者名为 test 的文章及标签 三、跨表删除 前言 表与表之间的关系可分为以下三种&#xff1a; 一对一: 一对一关系表示一个模型的每个实例与另一个模型的每个实例…

【字符函数】strcpy函数(字符串复制函数)+strcat函数(字符串追加)+strcmp函数(字符串比较)【笔记】

1.复制函数--------------strcpy函数 函数使用 char*strcpy&#xff08;char* destination, const char* source&#xff09; strcpy函数用于拷贝字符串&#xff0c;即将一个字符串中的内容拷贝到另一个字符串中&#xff08;会覆盖原字符串内容&#xff09;。它的参数是两个指…

Mysql梳理6——order by排序

目录 6 order by排序 6.1 排序数据 6.2 单列排序 6.3 多行排列 6 order by排序 6.1 排序数据 使用ORDER BY字句排序 ASC&#xff08;ascend&#xff09;:升序DESC(descend):降序 ORDER BY子句在SELECT语句的结尾 6.2 单列排序 如果没有使用排序操作&#xff0c;默认…

【HarmonyOS NEXT】DevEco快速实现真机截屏,并保存到电脑

点日志点照机图标选一个路径保存图片在ide中右键图片&#xff0c;点复制电脑随便找个位置保存图片https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-screenshot-V5

1-2.Jetpack 之 Navigation 跳转编码模板

一、Navigation 1、Navigation 概述 Navigation 是 Jetpack 中的一个重要成员&#xff0c;它主要是结合导航图&#xff08;Navigation Graph&#xff09;来控制和简化 Fragment 之间的导航&#xff0c;即往哪里走&#xff0c;该怎么走 2、Navigate 引入 在模块级 build.gra…

Datawhale------Tiny-universe学习笔记——Qwen(1)

1. Qwen整体介绍 对于一个完全没接触过大模型的小白来说&#xff0c;猛一听这个名字首先会一懵&#xff1a;Qwen是啥。这里首先解答一下这个问题。下面是官网给出介绍&#xff1a;Qwen是阿里巴巴集团Qwen团队研发的大语言模型和大型多模态模型系列。其实随着大模型领域的发展&a…

全同台加密综述

文章目录 一、FHE的定义与性质1、核心算法2、性质 二、构造思想三、全同态加密研究进展1、支持部分同态的 Pre-FHE 方案2、基于理想格的 第1代 FHE方案3、基于LWE的 第2代 FHE方案3、基于近似特征向量的 第3代 FHE方案4、支持浮点数运算的 第4代 FHE方案5、其他 FHE方案5.1、基…

数字化时代,住宅代理是怎样为企业赋能的?

在数字化时代&#xff0c;企业的发展也面临着转型&#xff0c;一方面是未知的挑战&#xff0c;一方面是不可多得的机遇。如何在全球市场中保持竞争力是企业要认真思考的问题。如果说主动寻找出路太过冒险&#xff0c;那不妨试试内省式的自我管理革新。代理服务器是一种中介服务…

TI DSP下载器XDS100 V2.0无法使用问题

前言 TI DSP下载器XDS100 V2.0用着用着会突然报Error&#xff0c;特别是你想要用Code Composer Studio烧录下载程序的时候 查看设备管理器&#xff0c;发现XDS100 V2.0的设备端口莫名其妙消失了 问了淘宝的厂家&#xff0c;他说TI的开发板信号可能会导致调试器通信信号中断&a…

软件安全最佳实践:首先关注的地方

尽管组织拥有大量可用的工具&#xff0c;但应用程序安全性仍然不足。 最近的数据显示&#xff0c;在过去四到五年中&#xff0c;软件供应链攻击同比增长了 600-700%&#xff0c;超过一半的美国企业在过去 12 个月中遭受过某种形式的软件供应链攻击。 为何应用程序安全工作未…

相亲交易系统源码详解与开发指南

随着互联网技术的发展&#xff0c;越来越多的传统行业开始寻求线上转型&#xff0c;其中就包括婚恋服务。传统的相亲方式已经不能满足现代人快节奏的生活需求&#xff0c;因此&#xff0c;开发一款基于Web的相亲交易系统显得尤为重要开发者h17711347205。本文将详细介绍如何使用…

WEB攻防-JavaWweb项目JWT身份攻击组件安全访问控制

知识点&#xff1a; 1、JavaWeb常见安全及代码逻辑&#xff1b; 2、目录遍历&身份验证&逻辑&JWT&#xff1b; 3、访问控制&安全组件&越权&三方组件&#xff1b; 演示案例&#xff1a; JavaWeb-WebGoat8靶场搭建使用 安全问题-目录遍历&身份认…

Ubuntu20.04 搜索不到任何蓝牙设备

电脑信息 联想扬天YangTianT4900k 问题描述 打开蓝牙之后&#xff0c;一直转圈&#xff0c;搜索不到任何蓝牙设备 排查 dmesg | grep -i blue 有如下错误&#xff1a; Bluetooth: hci0: RTL: unknown IC info, lmp subver 8852, hci rev 000b, hci ver 000b lsusb 芯片型号如…

imo云办公室 Imo_DownLoadUI.php 任意文件下载漏洞复现

0x01 漏洞描述&#xff1a; imo云办公室由上海易睦网络科技有限公司于2007年创立&#xff0c;总部位于上海&#xff0c;imo云办公室管理运营企业即时通讯平台imo&#xff0c;包括对imo的在线支持&#xff0c;故障处理&#xff0c;客户服务等&#xff0c;对imo进行持续研发&…