洛谷P11873D模型

 这道题纯判断,先加上下,然后减前后左右,max(0,###)是用来防负数的

题目是这样的

题目描述

一座城市建立在规则的 n×m 网格上,并且网格均由 1×1 正方形构成。在每个网格上都可以有一个建筑,建筑由若干个 1×1×1 的立方体搭建而成(也就是所有建筑的底部都在同一平面上的)。几个典型的城市模型如下图所示:

现在给出每个网格上建筑的高度,即每个网格上建筑由多少个立方体搭建而成,要求这个建筑模型的表面积是多少。

输入格式

第 1 行包含 2 个正整数 n,m,为城市模型的长与宽。

接下来 n 行,每行 m 个数字字符,描述了网格每个格子高度(可见所有建筑高度都大于等于 0 且小于等于 9)。

输出格式

一个非负整数,为城市模型的表面积。

输入输出样例

输入 #

3 3
111
212
111

输出 #1

38

输入 #2

3 4
1000
0010
0000

输出 #2

12

说明/提示

  • 20%的数据满足:n,m≤10;
  • 40%的数据满足:n,m≤100;
  • 100%的数据满足:1≤n,m≤1000。

以下是代码

#include <bits/stdc++.h>
using namespace std;
int n,m,a[1010][1010] = {0},z = 0;
string s;
int main(){
	cin>>n>>m;
	for(int i = 1;i <= n;i++){
		cin>>s;
		for(int j = 1;j <= m;j++){
			a[i][j] = s[j - 1] - 48;
		}
	}
	for(int i = 1;i <= n;i++){
		for(int j = 1;j <= m;j++){
			if(a[i][j] != 0){
				z = z + 2 + max(0,a[i][j] - a[i - 1][j]) + max(0,a[i][j] - a[i][j - 1]) + max(0,a[i][j] - a[i + 1][j]) + max(0,a[i][j] - a[i][j + 1]);
			}
		}
	}
	cout<<z;
	return 0;
}

点个赞吧!!!求求了!!!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值