Logo zibenlun 的博客

博客

[ABC295B] Bombs

...
zibenlun
2025-12-01 12:58:15
分块好啊

本文章由 WyOJ Shojo 从洛谷专栏拉取,原发布时间为 2023-04-09 15:20:14

Bombs

题目描述

有一个 R 行 C 列的盘面,点 (i)(j) 表示第 i行第 j列的格子。上面有三种状态,”.”代表空地,”#” 代表一堵墙,1,2,3,4,5,6,7,8,9代表炸弹。上面的1-9代表炸弹的威力值。

下面,所有的炸弹同时爆炸,所有曼哈顿距离小于等于每个点上的威力值的墙将变成空地。

注意:如果该点在爆炸范围内,且该点是炸弹,则不会变成空地。爆炸后,该炸弹本身会变成空地。

你需要输出爆炸后的盘面

直接暴力,先遍历所有的点,找到炸弹,再从头遍历,把所有在范围内的“#”变成“.”

注意:引爆时,不能把周围的炸弹变成“.”```

#include<bits\/stdc++.h>
using namespace std;
int n,m;
char a[1005][1005];
int main() {
	cin>>n>>m;
	for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) cin>>a[i][j];
	for(int i=1; i<=n; i++) {
		for(int j=1; j<=m; j++) {
			if(a[i][j]>='1'&&a[i][j]<='9') {
				for(int x=1; x<=n; x++) {
					for(int y=1; y<=m; y++) {
						if(abs(i-x)+abs(j-y)<=a[i][j]-'0'&&a[x][y]=='#') {
							a[x][y]='.';
						}
					}
				}
			}
		}
	}
	for(int i=1; i<=n; i++) {
		for(int j=1; j<=m; j++) {
			if(a[i][j]>='1'&&a[i][j]<='9') a[i][j]='.';
			cout<<a[i][j];
		}
		cout<<endl;
	}
	return 0;
}

评论

暂无评论

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。