[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;
}