B4451 [GESP202512 四级] 建造 题解

题目描述

小 A 有一张 M 行 N 列的地形图,其中第 i 行第 j 列的数字 aij​ 代表坐标 (i,j) 的海拔高度。

停机坪为一个 3×3 的区域,且内部所有 9 个点的最大高度和最小高度之差不超过 H。

小 A 想请你计算出,在所有适合建造停机坪的区域中,区域内部 9 个点海拔之和最大是多少。

输入格式

第一行三个正整数 M,N,H,含义如题面所示。

之后 M 行,第 i 行包含 N 个整数 ai1​,ai2​,...,aiN​,代表坐标 (i,j) 的高度。

数据保证总存在一个适合建造停机坪的区域。

输出格式

输出一行,代表最大的海拔之和。

输入输出样例

输入 #1复制运行

复制代码
5 5 3
5 5 5 5 5
5 1 5 1 5
5 5 5 5 5
5 2 5 2 5
3 5 5 5 2

输出 #1复制运行

复制代码
40

说明/提示

数据范围

对于所有测试点,保证 1≤M,N≤,1≤H,

AC代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int n,m,k,x=0;
int a[1010][1010];
bool f(int x,int y){
	if(x-y<=k){
		return true;
	}
	else{
		return false;	
	}
}
int main(){
	cin>>n>>m>>k;;
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			cin>>a[i][j];
		}
	}
	for(int i=1;i<n-1;i++){
		for(int j=1;j<m-1;j++){
			int m1=max(a[i-1][j-1],max(a[i-1][j],max(a[i-1][j+1],max(a[i][j-1],max(a[i][j],max(a[i][j+1],max(a[i+1][j-1],max(a[i+1][j],a[i+1][j+1]))))))));
			int m2=min(a[i-1][j-1],min(a[i-1][j],min(a[i-1][j+1],min(a[i][j-1],min(a[i][j],min(a[i][j+1],min(a[i+1][j-1],min(a[i+1][j],a[i+1][j+1]))))))));
			int s=a[i-1][j-1]+a[i-1][j]+a[i-1][j+1]+a[i][j-1]+a[i][j]+a[i][j+1]+a[i+1][j-1]+a[i+1][j]+a[i+1][j+1];
			if(f(m1,m2)){
				x=max(x,s);
			}
		}
	}
	cout<<x;
	return 0;
}
相关推荐
wabs6661 小时前
关于图论【最短路径之Dijkstra算法(堆优化版)|卡码网47.参加科学大会的思考】
数据结构·算法·图论·优先级队列·邻接表·小顶堆·卡码网
果果燕1 小时前
实习笔记(一):NFS、Samba、VNC、Git、CMake、systemd、内核、交叉编译
linux·arm开发·c++·笔记·git
坚持编程的菜鸟1 小时前
编写判断大小端程序
c语言·算法·判断大小端
papaofdoudou1 小时前
判断排列逆序奇偶性的乘积判别法(范德蒙德符号法)
人工智能·算法
牛艺翔2 小时前
C++基础
开发语言·c++
键盘会跳舞2 小时前
C++ :容器适配器stack源码级拆解
开发语言·c++··stack·先进后出
linux-hzh2 小时前
百日算法修炼 · Day 03
java·算法
不负岁月无痕2 小时前
简单理解操作系统结构
java·linux·c语言·开发语言·c++·面试
余额瞒着我当琳3 小时前
C++模板初阶与STL初探
android·java·c++
萧瑟其中~3 小时前
多线程锁详解:互斥锁·自旋锁·读写锁(CAS + futex 原理)
开发语言·c++