计算机挑战赛10

智能除草农业植保无人机作为最新的设备,可以加注除草剂进行除草。每次工作可以喷洒边长为K的正方形区域。现有一块边长为N的正方形农田,将其分成N*N个方格单元,已知每个单元里的杂草数量。求该植保无人机一次工作最多除草量和最少除草量的差值。输入说明:第一行是2个正整数,分别为N和K(1≤K≤N≤1000)。之后N行N列正整数,表示每个单元中的杂草数量(不超过50)。输出说明:该植保无人机一次工作最多除草量和最少除草量的差值。

输入样例:

5 2

1 1 1 1 1

1 1 1 1 1

1 1 1 1 1

1 1 1 1 1

1 2 3 1 1

输出样例:

7 4

代码:

C++:

cpp 复制代码
#include<iostream>
using namespace std;
int main() {
	int n, k; cin >> n >> k;
	int arr[500][500];
	for (auto i = 0; i < n; i++) {
		for (auto j = 0; j < n; j++) {
			int num;
			cin >> num;
			arr[i][j] = num;
		}
	}
	int max = 0;
	int min = 0x3f3f3f3f;
	for (auto i = 0; i < n - (k - 1); i++) {
		for (auto j = 0; j < n - (k - 1); j++) {
			int sum = 0;
			for (int i1 = 0; i1 < k; i1++) {
				for (int j1 = 0; j1 < k; j1++) {
					sum += arr[i + i1][j + j1];
				}
			}
			if (max <= sum) {
				max = sum;
			}
			if (min >= sum) {
				min = sum;
			}
		}
	}
	cout << max << ' ' << min << endl;
	return 0;
}

Python:

python 复制代码
n, k = map(int, input().split())
arr = [[0 for j in range(500)] for i in range(500)]
maxNum = 0
minNum = 0x3f3f3f3f
for i in range(n):
    count = 0
    num = map(int, input().split())
    for j in num:
        arr[i][count] = j
        count += 1
for i in range(0, n - (k - 1), 1):
    for j in range(0, n - (k - 1), 1):
        s = 0
        for x in range(k):
            for y in range(k):
                s += arr[i + x][j + y]
        if maxNum <= s:
            maxNum = s
        if minNum >= s:
            minNum = s
print(str(maxNum) + " " + str(minNum))

Java:

java 复制代码
package com.my.gududu;

import java.util.*;


public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int n, k;
        n = input.nextInt();
        k = input.nextInt();
        int arr[][] = new int[500][500];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                int num;
                num = input.nextInt();
                arr[i][j] = num;
            }
        }
        int max = 0;
        int min = 0x3f3f3f3f;
        for (int i = 0; i < n - (k - 1); i++) {
            for (int j = 0; j < n - (k - 1); j++) {
                int sum = 0;
                for (int i1 = 0; i1 < k; i1++) {
                    for (int j1 = 0; j1 < k; j1++) {
                        sum += arr[i + i1][j + j1];
                    }
                }
                if (max <= sum) {
                    max = sum;
                }
                if (min >= sum) {
                    min = sum;
                }
            }
        }
        System.out.println(max + " " + min);
    }
}
相关推荐
地平线开发者9 小时前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮9 小时前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者10 小时前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考10 小时前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
HXhlx13 小时前
CART决策树基本原理
算法·机器学习
Wect14 小时前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript
颜酱14 小时前
单调队列:滑动窗口极值问题的最优解(通用模板版)
javascript·后端·算法
Gorway21 小时前
解析残差网络 (ResNet)
算法
拖拉斯旋风21 小时前
LeetCode 经典算法题解析:优先队列与广度优先搜索的巧妙应用
算法
Wect21 小时前
LeetCode 207. 课程表:两种解法(BFS+DFS)详细解析
前端·算法·typescript