PVZ -- code

时间限制: 1000 ms 内存限制: 65536 kb
总通过人数: 81 总提交人数: 85
Special Judge

题目描述

BaconToast 游戏出品

你的后院有一些僵尸入侵,邻居疯狂的 $\text{BaconToast}$ 给了你几种植物用来抵御僵尸。

已知后院草坪规格为 $n\times m$($n$ 行 $m$ 列),每个格子可以种植至多一株植物,不同种类的植物攻击范围不同(如果将这株植物种植在 $(i, j) $ 格):

  • 豌豆射手(Peashooter:向前方远距离直线发射豌豆子弹,攻击范围为 $(i,j+k), k=1,2,3,\ldots$;
  • 忧郁蘑菇(Gloom-shroom:以自身为中心对 $3\times 3$ 四周 8 格的范围喷射孢子,攻击范围 $(i+k,j+l)$,其中 $k,l$ 在 $0,\pm1$ 内任意取值;
  • 小喷菇(Puff-shroom:向前方 3 格的距离发射孢子,攻击范围为$(i,j+k),k=1,2,3$;
  • 向日葵(Sunflower:每隔一段时间可以生产阳光,无法攻击。

现在有一些僵尸出现在草坪的某些格子上,请你判断它在不在某个植物的攻击范围内。

输入

第一行为草坪的行数 $n$ 和列数 $m$,表示一个 $n\times m$ 的草坪,草坪左上角的格子记为 $(0,0)$,草坪右下角的格子记为 $(n-1,m-1)$;($n$ 和 $m$ 均不大于 $10$)

第二行两个数 $k,l$ ,分别表示植物数量和询问数量;

接下来 $k$ 行,每一行表示一个植物的种类和坐标信息,格式为 <name> <i> <j><name> 是一个字符串,为上面提到的四种植物名称中的一种;<i><j> 分别是行坐标和列坐标。保证每一行坐标不重叠,即一格最多只会出现一个植物,且坐标不会超出规定的范围;

接下来 $l$ 行,每一行表示一次询问,格式为 <i> <j> 。表示询问的格子的坐标信息,保证坐标不会超过规定的范围。

数据保证 $k \leq n \times m, ~ l \leq 100$。

输出

输出 $l$ 行字符串,对于每次询问:

  • 如果这一格已经种植了某个植物,输出一行字符串 Hello, <name>! ,其中 <name> 是这株植物的种类名称,为上述四种中的一种;
  • 如果这一格没有植物,但这一格在某个植物的攻击范围内,输出一行字符串 Zombies can't win!
  • 如果这一格没有植物,且不在任何一个植物的攻击范围内,输出一行字符串 safe!

输入样例

5 10 
12 6
Sunflower 1 1
Sunflower 2 1
Sunflower 2 2
Sunflower 3 1
Sunflower 3 2
Peashooter 3 0
Peashooter 0 3
Puff-shroom 2 5
Puff-shroom 4 3
Puff-shroom 4 4
Gloom-shroom 1 6
Gloom-shroom 2 7
2 2
3 0
2 5
1 6
1 8
4 9

输出样例

Hello, Sunflower!
Hello, Peashooter!
Hello, Puff-shroom!
Hello, Gloom-shroom!
Zombies can't win!
safe!

Hint

  • 使用 strcmp 函数判断两个字符串是否相等;
  • 在二维数组中,用不同数字表示植物种类以及是否在攻击范围内。

Not hint

pAB9mKH.png

BUG 代码

#include <stdio.h>
#include <string.h>

int main() {
    int a[15][15] = {0};
    int b[15][15] = {0};
    char info[5][20] = {"Peashooter", "Glom-shroom", "Puff-shroom", "Sunflower"};
    int n, m, k, l;
    scanf("%d%d%d%d", &n, &m, &k, &l);
    while (k--) {
        char name[20];
        int i, j;
        scanf("%s%d%d", name, &i, &j);
        if (strcmp(name, "Peashooter") == 0) {
            a[i + 1][j + 1] = 1;
            for (int x = 1; j + 1 + x <= m; x++) {
                b[i + 1][j + 1 + x] = 1;
            }
        }
        else if (strcmp(name, "Glom-shroom") == 0) {
            b[i + 1][j + 1] = 2;
            b[i + 1 - 1][j + 1 - 2] = b[i + 1 - 1][j + 1] = b[i + 1 - 1][j + 1 + 1] = 1;
            b[i + 1][j + 1 - 1] = b[i + 1][j + 1] = 1;
            b[i + 1 + 1][j + 1 - 1] = b[i + 1 + 1][j + 1] = 1;
        }
        else if (strcmp(name, "Puff-shroom") == 0) {
            b[i + 1][j + 1] = 3;
            b[i + 1][j + 1 + 1] = b[i + 1][j + 1 + 2] = b[i + 1][j + 1 + 3] = b[i + 1][j + 1 + 4] = 1;
        }
        else {
            b[i + 1][j + 1] = 4;
        }
    }
    while (l--) {
        int i, j;
        scanf("%d%d", &i, &j);
        if (a[i][j]) {
            printf("Hello, %s!\n", info[a[i][j]]);
        }
        else if (b[i][j]) {
            printf("Zombies can't win!\n");
        }
        else {
            printf("safe!\n");
        }
    }
    return 0;
}

Author: $\text{BaconToast}$

相关推荐