本文已参与「新人创作礼」活动,一起开启掘金创作之路。 题目背景
初一党应该都知道...... 题目描述
话说有一天 linyorson 在“我的世界”开了一个 n \times nn×n(n \le 100n≤100)的方阵,现在他有 mm 个火把和 kk 个萤石,分别放在 (x_1, y_1) \sim (x_m, y_m)(x1,y1)∼(xm,ym) 和 (o_1, p_1) \sim (o_k, p_k)(o1,p1)∼(ok,pk) 的位置,没有光或没放东西的地方会生成怪物。请问在这个方阵中有几个点会生成怪物?
P.S. 火把的照亮范围是:
|暗|暗| 光 |暗|暗|
|暗|光| 光 |光|暗|
|光|光|火把|光|光|
|暗|光| 光 |光|暗|
|暗|暗| 光 |暗|暗|
萤石:
|光|光| 光 |光|光|
|光|光| 光 |光|光|
|光|光|萤石|光|光|
|光|光| 光 |光|光|
|光|光| 光 |光|光|
输入格式
输入共 m + k + 1m+k+1 行。 第一行为 n, m, kn,m,k。 第 22 到第 m + 1m+1 行分别是火把的位置 x_i, y_ixi,yi。 第 m + 2m+2 到第 m + k + 1m+k+1 行分别是萤石的位置 o_i, p_ioi,pi。
注:可能没有萤石,但一定有火把。
所有数据保证在 int 范围内。 输出格式
有几个点会生出怪物。 输入输出样例
输入 #1复制
5 1 0 3 3
输出 #1复制
12
#include<iostream>
using namespace std;
int main()
{
int n, m, k;
cin >> n >> m >> k;
int i, j, a[110][110];
for (i = 0; i < n+4; i++)
{
for (j = 0; j < n+4; j++)
{
a[i][j] = 0;
}
}
for (i = 0; i < m; i++)
{
int x, y;
cin >> x >> y;
a[x - 1][y + 1] = 1;
a[x][y] = a[x][y + 1] = a[x][y + 2] = 1;
a[x + 1][y - 1] = a[x + 1][y] = a[x + 1][y + 1] = a[x + 1][y + 2] = a[x + 1][y + 3] = 1;
a[x + 2][y] = a[x + 2][y + 1] = a[x + 2][y + 2] = 1;
a[x + 3][y + 1] = 1;
}
for (i = 0; i < k; i++)
{
int x, y;
cin >> x >> y;
a[x-1][y-1] = a[x-1][y] = a[x-1][y + 1] = a[x-1][y + 2] = a[x-1][y + 3] = 1;
a[x][y-1] = a[x][y] = a[x][y + 1] = a[x][y + 2] = a[x][y + 3] = 1;
a[x + 1][y-1] = a[x + 1][y] = a[x + 1][y + 1] = a[x + 1][y + 2] = a[x + 1][y + 3] = 1;
a[x + 2][y-1] = a[x + 2][y] = a[x + 2][y + 1] = a[x + 2][y + 2] = a[x + 2][y + 3] = 1;
a[x + 3][y-1] = a[x + 3][y] = a[x + 3][y + 1] = a[x + 3][y + 2] = a[x + 3][y + 3] = 1;
}
int sum = 0;
for (i = 2; i < n + 2; i++)
{
for (j = 2; j < n + 2; j++)
{
if (a[i][j] == 0)
{
sum++;
}
}
}
cout << sum;
return 0;
}