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!
strcmp
函数判断两个字符串是否相等;#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}$