[ABC295B] Bombs
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;
}