题目描述
小 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;
}