也考虑越界了,还有3个wa,大佬帮忙看看球球了
查看原帖
也考虑越界了,还有3个wa,大佬帮忙看看球球了
250168
catof221b楼主2023/2/3 01:40
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int m,n,k,monster=0;
    scanf("%d%d%d",&n,&m,&k);
    int a[108][108]={0};//地图开大点,避免越界
    int h[100][2]={0},y[100][2]={0};//h火把,y萤石
    
    //存光源
    for(int i=0;i<m;i++)
    {
        scanf("%d%d",&h[i][0],&h[i][1]);
    }
    for(int i=0;i<k;i++)
    {
        scanf("%d%d",&y[i][0],&y[i][1]);
    }
    
    //找出照亮区域
    for(int i=0;i<m;i++)
    {
        int p=h[i][0]+1,q=h[i][1]+1;//p,q分别对应横纵坐标,+1是为了不让光源跑到坐标为负数的地方
        a[p][q]=1;//光源处
        for(int j=p-1;j<=p+1;j++)
        {
            for(int o=p-1;o<=p+1;o++)
            {
                a[j][o]=1;//照亮处
            }
        }
        a[p+2][q]=a[p-2][q]=a[p][q+2]=a[p][q-2]=1;
    }
    for(int i=0;i<k;i++)
    {
        int p=y[i][0]+1,q=y[i][1]+1;
        a[p][q]=1;
        for(int j=p-2;j<=p+2;j++)
        {
            for(int o=p-2;o<=p+2;o++)
            {
                a[j][o]=1;
            }
        }
    }

    //打印
    for(int i=2;i<n+2;i++)
    {
        for(int j=2;j<n+2;j++)
        {
            //printf("%d ",a[i][j]);
            if(!a[i][j]){monster++;}
        }
        //putchar('\n');
    }
    printf("%d",monster);


    return 0;
}
2023/2/3 01:40
加载中...