【OD】【E卷】【真题】【100分】光伏场地建设规划(PythonJavajavaScriptC++C)

题目描述

祖国西北部有一片大片荒地,其中零星的分布着一些湖泊,保护区,矿区;
整体上常年光照良好,但是也有一些地区光照不太好。

某电力公司希望在这里建设多个光伏电站,生产清洁能源对每平方公里的土地进行了发电评估,
其中不能建设的区域发电量为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

输入

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

输出

3

解题思路

本题可以使用动态规划前缀和思想解题。

解题思路如下:

首先,将每一行在水平方向上选取c个相邻地块进行发电量合并,用例中是2块相邻的地合并 image-20230305113929640

行合并完后,接下来对列进行合并

image-20230305113942246

样的话,最终得到【9,16,22,21】

其中9,起始就是下图中绿色部分,是一个c*c的区域,9是这个区域的发电量总和。其他的16,22,21也同理。

image-20230305111558836

因此,9,16,22,21每一个都是符合要求发电站发电量>6的区域,因此结果输出4个

Java

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 输入地区长r,宽c,电站边长s,最低发电量min
        int r = scanner.nextInt();
        int c = scanner.nextInt();
        int s = scanner.nextInt();
        int min = scanner.nextInt();

        // 输入每个区域每平方公里的发电量,存入矩阵matrix中
        int[][] matrix = new int[r][c];
        for (int i = 0; i < r; i++) {
            for (int j = 0; j < c; j++) {
                matrix[i][j] = scanner.nextInt();
            }
        }

        // 遍历所有可能的电站位置,计算该位置的矩形区域发电量
        int ans = 0;
        for (int i = s; i <= r; i++) {
            for (int j = s; j <= c; j++) {
                int square = 0;
                for (int x = i - s; x < i; x++) {
                    for (int y = j - s; y < j; y++) {
                        square += matrix[x][y];
                    }
                }
                if (square >= min) ans++;
            }
        }

        // 输出结果
        System.out.println(ans);
    }
}

Python

def main():
    r, c, s, min_power = map(int, input().split())  # 输入地区长r,宽c,电站边长s,最低发电量min

    # 输入每个区域每平方公里的发电量,存入矩阵matrix中
    matrix = [list(map(int, input().split())) for _ in range(r)]

    # 遍历所有可能的电站位置,计算该位置的矩形区域发电量
    ans = 0
    for i in range(s, r + 1):
        for j in range(s, c + 1):
            square = 0
            for x in range(i - s, i):
                for y in range(j - s, j):
                    square += matrix[x][y]
            if square >= min_power:
                ans += 1

    # 输出结果
    print(ans)


if __name__ == "__main__":
    main()

JavaScript

const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let length, width, stationSide, minPower;
const lines = [];

rl.on("line", (line) => {
  lines.push(line);

  if (lines.length === 1) {
    [length, width, stationSide, minPower] = lines[0].split(" ").map(Number);
  }

  if (length && lines.length === length + 1) {
    const matrix = lines.slice(1).map(line => line.split(" ").map(Number));
    let ans = 0;

    for (let i = stationSide; i <= length; i++) {
      for (let j = stationSide; j <= width; j++) {
        let square = 0;
        for (let x = i - stationSide; x < i; x++) {
          for (let y = j - stationSide; y < j; y++) {
            square += matrix[x][y];
          }
        }
        if (square >= minPower) {
          ans += 1;
        }
      }
    }

    console.log(ans);
    rl.close();
  }
});

C++

#include <iostream>
#include <vector>
using namespace std;
int main() {
    int r, c, s, min;
    // 输入调研区域的长、宽,正方形电站的边长,以及最低发电量
    cin >> r >> c >> s >> min;

    // 创建一个二维矩阵存储每个区域的发电量
    vector<vector<int>> matrix(r, vector<int>(c));
    // 输入矩阵的每个元素,即每个区域的发电量
    for (int i = 0; i < r; i++) {
        for (int j = 0; j < c; j++) {
            cin >> matrix[i][j];
        }
    }

    int ans = 0;  // 记录满足条件的正方形区域个数
    // 遍历所有可能的正方形区域
    for (int i = s; i <= r; i++) {
        for (int j = s; j <= c; j++) {
            int square = 0;  // 记录当前正方形区域的总发电量
            // 计算以(i, j)为右下角的正方形的总发电量
            for (int x = i - s; x < i; x++) {
                for (int y = j - s; y < j; y++) {
                    square += matrix[x][y];
                }
            }
            // 如果当前正方形区域的总发电量满足最低要求,则计数+1
            if (square >= min) ans++;
        }
    }

    // 输出满足条件的正方形区域个数
    cout << ans << endl;
    return 0;
}

C语言

#include <stdio.h>

int main() {
    int r, c, s, min;
    // 输入调研区域的长、宽,正方形电站的边长,以及最低发电量
    scanf("%d %d %d %d", &r, &c, &s, &min);

    int matrix[r][c];
    // 输入每个区域的发电量
    for (int i = 0; i < r; i++) {
        for (int j = 0; j < c; j++) {
            scanf("%d", &matrix[i][j]);
        }
    }

    int ans = 0;  // 记录满足条件的正方形区域个数
    // 遍历所有可能的正方形区域
    for (int i = s; i <= r; i++) {
        for (int j = s; j <= c; j++) {
            int square = 0;  // 记录当前正方形区域的总发电量
            // 计算以(i, j)为右下角的正方形的总发电量
            for (int x = i - s; x < i; x++) {
                for (int y = j - s; y < j; y++) {
                    square += matrix[x][y];
                }
            }
            // 如果当前正方形区域的总发电量满足要求,则计数+1
            if (square >= min) ans++;
        }
    }

    // 输出满足条件的正方形区域个数
    printf("%d\n", ans);
    
    return 0;
}

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

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

相关文章

打印机出现线条和残影情况的主要原因和解决办法

本篇文章主要讲解&#xff0c;打印机出现打印文本&#xff0c;出现线条和残影情况时的解决办法和主要原因的详细解答和处理方法。 作者&#xff1a;任聪聪 日期&#xff1a;2024年10月19日 博客地址&#xff1a;https://rccblogs.com/604.html 打印现象&#xff1a; 说明&…

【virtuoso】sp测电阻

电路测量原理&#xff1a; 1. 电路原理图 2. 仿真设置 点击select&#xff0c;在原理图选择port设置sp扫频范围 3. plot图像 3.1 plot电阻图像 由公式可得&#xff0c;电阻值为阻抗的实部&#xff0c;所以 1. 选择 ZP 2. 绘制real 3. 点击Z11 4. 即可看到电阻值 3.2 plot电容图…

MySQL数据的导出

【图书推荐】《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;》-CSDN博客 《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;&#xff08;数据库技术丛书&#xff09;》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…

AI写作助手系统盈利模式分析:打造盈利的AI网站

引言 有数据显示&#xff0c;截至2024年初&#xff0c;全球自媒体从业人员数量已超过1.5亿人&#xff0c;其中中国自媒体从业人员数量超过1亿人。这一数字表明&#xff0c;中国自媒体行业拥有庞大的从业者群体。 另一方面&#xff0c;从自媒体行业的发展趋势来看&#xff0c;…

Axure重要元件三——中继器时间排序

亲爱的小伙伴&#xff0c;在您浏览之前&#xff0c;烦请关注一下&#xff0c;在此深表感谢&#xff01; 本节课&#xff1a;中继器数据时间排序 课程内容&#xff1a;数据的升序、降序、重置排序 应用场景&#xff1a;表单数据的排序 案例展示&#xff1a; 步骤一&#xff…

JVM(HotSpot):GC之垃圾回收阶段

文章目录 前言一、标记清除算法(Mark Sweep)二、标记整理算法(Mark Compact)三、复制算法(Copy) 前言 标记出垃圾对象之后&#xff0c;就要进行清理。 那么&#xff0c;如何清理&#xff1f; 这里也有相应的算法。 主要有三种。 一、标记清除算法(Mark Sweep) 原理说明&…

网络学习笔记

一、网络的结构与功能 网络的鲁棒性与抗毁性 如果在移走少量节点后网络中的绝大部分节点仍然是连通的&#xff0c;那么就该网络的连通性对节点故障具有鲁棒性 网络上的动力学 动力系统&#xff1a;自旋、振子或混沌的同步、可激发系统 传播过程&#xff1a;信息传播与拥堵…

【MySQL】mysql导出数据WPS科学计数法解决方法

导出的长串数字 id 会导致科学计数法&#xff0c;修改 WPS 单元格格式可以解决 数字太长还是有问题&#xff0c;最后有个数字会变成 0 可以 直接用 python脚本转换一下 vim convert_txt_xlsx.py #!/usr/bin/env python3# 使用方法# 安装库 # pip3 install pandas openpyxl…

YOLO11改进|注意力机制篇|引入SEAM注意力机制

目录 一、【SEAM】注意力机制1.1【SEAM】注意力介绍1.2【SEAM】核心代码二、添加【SEAM】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4三、yaml文件与运行3.1yaml文件3.2运行成功截图一、【SEAM】注意力机制 1.1【SEAM】注意力介绍 下图是【SEAM】的结构图,让我们简单分析一下…

2-127基于matlab的非圆齿轮啮合动画设计

基于matlab的非圆齿轮啮合动画设计&#xff0c;可根据需求设置齿数&#xff0c;齿高、平滑系数等&#xff0c;最后输出啮合动画。程序已调通&#xff0c;可直接运行。 下载源程序请点链接&#xff1a;2-127基于matlab的非圆齿轮啮合动画设计

从Naive RAG到Agentic RAG:基于Milvus构建Agentic RAG

检索增强生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09;作为应用大模型落地的方案之一&#xff0c;通过让 LLM 获取上下文最新数据来解决 LLM 的局限性。典型的应用案例是基于公司特定的文档和知识库开发的聊天机器人&#xff0c;为公司内部人员快速检索内部…

萤石云服务支持云端视频AI自动剪辑生成

萤石视频云存储及媒体处理服务是围绕IoT设备云端存储场景下的音视频采集、媒体管理、视频剪辑和分发能力的一站式、专业云服务&#xff0c;并可面向广大开发者提供复杂设备存储场景下的完整技术方案。目前该服务新增了视频剪辑功能&#xff0c;支持将视频片段在云端进行裁剪并拼…

nacos的使用

nacos的使用 本专栏的上一篇文章已经部署好了nacos&#xff0c;我们就可以使用nacos做配置中心和注册中心了。 一、配置中心 有了nacos&#xff0c;我们在微服务项目的配置文件里只需要做一些简单的配置就行了&#xff1a;服务名、服务端口、nacos的地址。其余的配置都可以用…

python 作业1

任务1: python为主的工作是很少的 学习的python的优势在于制作工具&#xff0c;制作合适的工具可以提高我们在工作中的工作效率的工具 提高我们的竞争优势。 任务2: 不换行 换行 任务3: 安装pycharm 进入相应网站Download PyCharm: The Python IDE for data science and we…

基于springboot的4S店车辆管理系统

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 系统展示 【2024最新】基于JavaSpringBootVueMySQL的&#xff0c;前后端分离。 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;…

基于springboot+微信小程序校园自助打印管理系统(打印1)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于springboot微信小程序校园自助打印管理系统实现了管理员、店长和用户。管理员实现了用户管理、店长管理、打印店管理、打印服务管理、服务类型管理、预约打印管理和系统管理。店长实现…

【哈工大_操作系统实验】Lab6 信号量的实现和应用

本节将更新哈工大《操作系统》课程第六个 Lab 实验 信号量的实现和应用。按照实验书要求&#xff0c;介绍了非常详细的实验操作流程&#xff0c;并提供了超级无敌详细的代码注释。 实验目的&#xff1a; 加深对进程同步与互斥概念的认识&#xff1b;综掌握信号量的使用&#x…

uniapp x 样式 uvue css 样式节选

uniapp的下一版本uniapp x已经发布&#xff0c;uniapp x支持的样式为uvue css。 1、css模块 模块App支持情况备注背景与边框√不支持背景图盒子模型√Flex 布局√Inline 布局Inline-Block 布局Block 布局字体√详见Positioned 布局√CSS AnimationxCSS Transition√CSS Varia…

汇编实现逆序复制数据

一.实验目的 使其可以将10000H &#xff5e; 1000FH中的8个字&#xff0c;逆序复制到20000H &#xff5e; 2000FH中。 二.实验过程表示 三.部分汇编实现代码 mov ax,1000H ;将1000H放入AX寄存器中 mov ds,ax ;将AX寄存器中的内容放入DS寄存器中&#xff0c;这时候DS中存…

Ubuntu里彻底卸载UHD

查看已经安装的UHD版本uhd_find_devices&#xff0c;展示的是当前安装的 UHD 库版本所支持的设备信息&#xff0c;下载了多个版本的uhd但是又记不住安装的位置&#xff0c;想要把所有的uhd相关环境全都删掉&#xff0c;用下边这个命令看一下所有的uhd信息&#xff1a; apt lis…