牛客小白月赛44 B 顽皮恶魔

顽皮恶魔

https://ac.nowcoder.com/acm/contest/11221/B

对题目意思做一个解释。

你需要找到图中不安全的普通植物。

什么叫做不安全呢?在周围 3×33×3 八个位置中没有萝卜保护伞,就是不安全的。

我们直接暴力遍历地图,找到普通植物时判断它周围八个位置中有没有萝卜保护伞,计数即可。

代码如下:

#include <bits/stdc++.h>
 
using namespace std;
 
const int N = 1e3 + 70;
 
char c[N][N];
 
int main () {
    int T, n, m;
     
    scanf ("%d", &T);
     
    while (T --) {
        scanf ("%d%d", &n, &m);
        
        for (int i = 1; i <= n; i ++) {
            scanf ("%s", c[i] + 1);
        }
         
        int res = n * m;
         
        for (int i = 1; i <= n; i ++) {
            for (int j = 1; j <= m; j ++) {
                if (c[i][j] == 'P') {//找到普通植物。
                    bool f = false;//判断周围是否有萝卜保护伞。
                    for (int k1 = i - 1; k1 <= i + 1; k1 ++) {
                        for (int k2 = j - 1; k2 <= j + 1; k2 ++) {
                            //遍历包括普通植物的3×3矩阵。
                            if (c[k1][k2] == '*' && k1 >= 1 && k2 >= 1 && k1 <= n && k2 <= m) {
                                //不能越出边界。
                                res --;//不安全的数量减一。
                                
                                f = true;
                                 
                                break;
                            }
                        }
                        
                        if (f == true) {
                            break;
                        }
                    }
                }
                 
                else {
                    res --;//只要不是普通植物,都不会被偷走。
                }
            }
        }
 
        printf ("%d\n", res);
    }
}
全部评论

相关推荐

4 收藏 评论
分享
牛客网
牛客企业服务