题解 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;
}
```