当前位置: 首页 > news >正文

(新卷,200分)- 探索地块建立(Java JS Python)

(新卷,200分)- 探索地块建立(Java & JS & Python)

题目描述

给一块n*m的地块,相当于n*m的二维数组,每个元素的值表示这个小地块的发电量;

求在这块地上建立正方形的边长为c的发电站,发电量满足目标电量k的地块数量。

输入描述

第一行为四个按空格分隔的正整数,分别表示n, m , c k

后面n行整数,表示每个地块的发电量

输出描述

输出满足条件的地块数量

用例
输入2 5 2 6
1 3 4 5 8
2 3 6 7 1
输出4
说明
题目解析

本题最优解题思路是使用:二维矩阵前缀

JavaScript算法源码
/* JavaScript Node ACM模式 控制台输入获取 */ const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); const lines = []; let n, m, c, k; rl.on("line", (line) => { lines.push(line); if (lines.length === 1) { [n, m, c, k] = lines[0].split(" ").map(Number); } if (n && lines.length === n + 1) { const matrix = lines.slice(1).map((line) => line.split(" ").map(Number)); console.log(getResult(matrix, n, m, c, k)); lines.length = 0; } }); /** * * @param {*} matrix n*m的地块 * @param {*} n 地块行数 * @param {*} m 地块列数 * @param {*} c 正方形的发电站边长为c * @param {*} k 目标电量k */ function getResult(matrix, n, m, c, k) { const preSum = new Array(n + 1).fill(0).map(() => new Array(m + 1).fill(0)); for (let i = 1; i <= n; i++) { for (let j = 1; j <= m; j++) { preSum[i][j] = preSum[i - 1][j] + preSum[i][j - 1] - preSum[i - 1][j - 1] + matrix[i - 1][j - 1]; } } let ans = 0; for (let i = c; i <= n; i++) { for (let j = c; j <= m; j++) { const square = preSum[i][j] - (preSum[i - c][j] + preSum[i][j - c]) + preSum[i - c][j - c]; if (square >= k) ans++; } } return ans; }
Java算法源码
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); int c = sc.nextInt(); int k = sc.nextInt(); int[][] matrix = new int[n][m]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { matrix[i][j] = sc.nextInt(); } } System.out.println(getResult(matrix, n, m, c, k)); } /** * @param matrix n*m的地块 * @param n 地块行数 * @param m 地块列数 * @param c 正方形的发电站边长为c * @param k 目标电量k * @return 可以建设几个发电站 */ public static int getResult(int[][] matrix, int n, int m, int c, int k) { int[][] preSum = new int[n + 1][m + 1]; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { preSum[i][j] = preSum[i - 1][j] + preSum[i][j - 1] - preSum[i - 1][j - 1] + matrix[i - 1][j - 1]; } } int ans = 0; for (int i = c; i <= n; i++) { for (int j = c; j <= m; j++) { int square = preSum[i][j] - (preSum[i - c][j] + preSum[i][j - c]) + preSum[i - c][j - c]; if (square >= k) ans++; } } return ans; } }
Python算法源码
# 输入获取 n, m, c, k = map(int, input().split()) matrix = [list(map(int, input().split())) for i in range(n)] # 算法入口 def getResult(n, m, c, k, matrix): """ :param n: 调研区域的长,行数 :param m: 调研区域的宽,列数 :param c: 正方形电站的边长 :param k: 正方形电站的最低发电量 :param matrix: 调研区域每单位面积的发电量矩阵 :return: 返回调研区域有几个符合要求正方形电站 """ preSum = [[0 for j in range(m + 1)] for i in range(n + 1)] for i in range(1, n + 1): for j in range(1, m + 1): preSum[i][j] = preSum[i - 1][j] + preSum[i][j - 1] - preSum[i - 1][j - 1] + matrix[i - 1][j - 1] ans = 0 for i in range(c, n + 1): for j in range(c, m + 1): square = preSum[i][j] - (preSum[i - c][j] + preSum[i][j - c]) + preSum[i - c][j - c] if square >= k: ans += 1 return ans # 算法调用 print(getResult(n, m, c, k, matrix))
http://www.cnnetsun.cn/news/754496.html

相关文章:

  • dswave.dll文件丢失找不到 免费下载方法分享
  • 亲测好用!9款AI论文平台测评:本科生毕业论文必备工具
  • Flutter for HarmonyOS 开发指南(一):环境搭建与项目创建
  • 想在 Java 八股文面试中脱颖而出?这1000 道互联网大厂 工程师面试题必不可少!!
  • KEYSIGHT是德 N1912A功率计:宽带多通道功率测量的标杆之选
  • CSS新手别慌:搞懂BFC和浏览器差异,布局不再翻车(附实战避坑指
  • 20.什么是依赖注入
  • Java计算机毕设之基于springboot的西安秦岭野生动物园智能化管理系统基于Springboot+Vue的野生动物园智能化管理系统(完整前后端代码+说明文档+LW,调试定制等)
  • 文本创作的十字路口:Markdown 与富文本编辑器的底层逻辑博弈
  • 衡石科技Agentic BI实战:基于自然语言查询与自动化分析的新一代智能系统
  • 模型再牛也白搭?聊聊在线特征服务是怎么把系统拖慢的,又该怎么救
  • 【计算机毕业设计案例】基于springboot的民宿房间预约管理系统设计与实现民宿客房管理系统(程序+文档+讲解+定制)
  • 《P1939 矩阵加速(数列)》
  • PX4中关于GPS质量检测和相关控制参数
  • day162—递归—买卖股票的最佳时机Ⅱ(LeetCode-122)
  • 【鸿蒙原生开发会议随记 Pro】拒绝面条代码 基于 MVVM 的代码架构与状态管理选型
  • C#每日面试题-简述反射
  • 基于springBoot的高校学生绩点管理系统的设计与实现
  • 智慧园区智能照明控制系统解决方案
  • 物联网+AI双驱动,智慧园区消防电源监控迈入智能新时代
  • 基于SpringBoot的高校餐饮档口管理系统的设计与实现
  • Java基于SSM+JSP的文具商城系统的设计与实现
  • 【拯救HMI】让新手也能轻松上手:HMI设计的三个贴心思路
  • 价值投资中的新型高效储氢材料技术前景
  • ADI Trinamic如何让伺服系统开发化繁为简
  • 即插即用系列 | CVPR 2025 SegMAN: Mamba与局部注意力强强联合,多尺度上下文注意力的新SOTA
  • wait和notify
  • FastScheduler:让 Python 定时任务变得优雅简单
  • 2026年物业管理行业发展核心趋势解析:服务升级与价值重塑
  • Qt国际化实战指南:使用翻译官实现多语言应用