题解 P1789 【【Mc生存】插火把】
模拟一下就好了,只是代码有点麻烦。
用bool二维数组,有光1,无光0.
```cpp
#include<iostream>
using namespace std;
int n,m,k,x,y,i,j,u,v,ans;//n,m,k(题目),x,y(临时坐标),i,j,u,v(循环变量),ans(答案)。
bool ma[10000][10000];//自己试了几次,数据只有这么大……
int main(){
cin>>n>>m>>k;
for(i=1;i<=m;i++){//火把
cin>>x>>y;
ma[x-2][y]=ma[x-1][y+1]=ma[x-1][y]=ma[x-1][y-1]=ma[x][y+2]=ma[x][y+1]=ma[x][y]=ma[x][y-1]=ma[x][y-2]=ma[x+1][y+1]=ma[x+1][y]=ma[x+1][y-1]=ma[x+2][y]=1;//要标记有光的。(慢慢打,有点麻烦。)
}
for(i=1;i<=k;i++){//萤石
cin>>x>>y;
for(u=-2;u<=2;u++)
for(v=-2;v<=2;v++)
ma[x+u][y+v]=1;//萤石用循环标记,代码就短一些。
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(ma[i][j]==0)
ans++;
cout<<ans;
return 0;
}
```