题解 P1789 【【Mc生存】插火把】

· · 题解

这是一道大水题

首先,我们可以先用数组来储存地图(建议用int,我试过bool会RE)

每次读入火把和萤石的坐标

接着把能照亮的地方标记起来

最后用计数器统计会生成怪的地方有钻石的话还怕怪吗

最后,上代码

#include<bits/stdc++.h>
using namespace std;
int a[105][105],n,m,k,x,y,cnt;
int main(){
    cin>>n>>m>>k;//读入数据 
    for(int i=1;i<=m;i++){
        cin>>x>>y;
        for(int i=x-1;i<=x+1;i++)for(int j=y-1;j<=y+1;j++)a[i][j]=true;//中间3*3的方格被照亮 
        a[x-2][y]=true;
        a[x+2][y]=true;
        a[x][y+2]=true;
        a[x][y-2]=true;//别忘了四个角 
    }
    for(int i=1;i<=k;i++){
        cin>>x>>y;
        for(int i=x-2;i<=x+2;i++)for(int j=y-2;j<=y+2;j++)a[i][j]=true;//5*5的方格被照亮 
    }
    for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(a[i][j]==0)cnt++;//统计没光的地方 
    cout<<cnt;
    return 0;//完美结束 
}//求求管理员大发慈悲给我通过

先别走 彩蛋来了

MC小提示: 创造模式命令方块的一些指令

tp @p x y z(坐标)(传送)

give @p xxx(物品名称)(给予)

say"xxx"(说话)

...(其他的自己百度搜吧)