题目描述
话说有一天 linyorson 在“我的世界”开了一个 n \times nn×n 的方阵,现在他有 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。
注:可能没有萤石,但一定有火把。
输出格式
有几个点会生出怪物。
输入输出样例
输入 #1
5 1 0 3 3
输出 #1
12
一道很水的模拟题:
#include<iostream>
using namespace std;
int a[101][101];
int main() {
int n,h,y,sum=0;
scanf("%d %d %d",&n,&h,&y);
for(int i=1; i<=h; i++) {
int x,y;
scanf("%d %d",&x,&y);
a[x][y]=1;
if(x-1>0)a[x-1][y]=1;
if(x-2>0)a[x-2][y]=1;
if(x-1>0&&y-1>0)a[x-1][y-1]=1;
if(x-1>0&&y+1<=n)a[x-1][y+1]=1;
if(y+1<=n)a[x][y+1]=1;
if(y+2<=n)a[x][y+2]=1;
if(y-1>0)a[x][y-1]=1;
if(y-2>0)a[x][y-2]=1;
if(x+1<=n&&y-1>0)a[x+1][y-1]=1;
if(x+1<=n&&y+1<=n)a[x+1][y+1]=1;
if(x+1<=n)a[x+1][y]=1;
if(x+2<=n)a[x+2][y]=1;
}
for(int i=1; i<=y; i++) {
int x,y;
scanf("%d %d",&x,&y);
a[x][y]=1;
if(x-1>0) a[x-1][y]=1;
if(x-2>0) a[x-2][y]=1;
if(x-1>0&&y-1>0) a[x-1][y-1]=1;
if(x-1>0&&y+1<=n) a[x-1][y+1]=1;
if(y+1<=n) a[x][y+1]=1;
if(y+2<=n)a[x][y+2]=1;
if(y-1>0)a[x][y-1]=1;
if(y-2>0)a[x][y-2]=1;
if(y-1>0&&x+1<=n) a[x+1][y-1]=1;
if(x+1<=n&&y+1<=n) a[x+1][y+1]=1;
if(x+1<=n)a[x+1][y]=1;
if(x+2<=n)a[x+2][y]=1;
if(x-2>0&&y-1>0)a[x-2][y-1]=1;
if(x-2>0&&y-2>0)a[x-2][y-2]=1;
if(x-1>0&&y-2>0)a[x-1][y-2]=1;
if(x-2>0&&y+2<=n)a[x-2][y+2]=1;
if(x-2>0&&y+1<=n)a[x-2][y+1]=1;
if(x-1>0&&y+2<=n)a[x-1][y+2]=1;
if(x+2<=n&&y+2<=n)a[x+2][y+2]=1;
if(x+2<=n&&y+1<=n)a[x+2][y+1]=1;
if(x+1<=n&&y+2<=n)a[x+1][y+2]=1;
if(x+2<=n&&y-2>0)a[x+2][y-2]=1;
if(x+2<=n&&y-1>0)a[x+2][y-1]=1;
if(x+1<=n&&y-2>0)a[x+1][y-2]=1;
}
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
if(a[i][j]==0) sum++;
}
}
cout<<sum;
return 0;
}