!!!这道题,属实是简单且坑人,如果按照样例你的输出结果是14的话,那就说明你忽略了一个点。。这道题里的坐标都是从1开始的,给出的火把和萤石的坐标都是按坐标从1开始的。。(亲身经历,血的教训!)
本题中还需要考虑数组下标超限的问题,我们直接让数组整体右下移两位,就省去了判断的麻烦
#includeusing namespace std; int a[110][110]; int main() { int sum=0;//记录有东西和火光的位置 int n,m,k; cin>>n>>m>>k;//矩阵、火把、石头 int x,y;//火把的坐标 for(int h=2;h<=m+1;h++) { cin>>x>>y; x=x+2;//防止超出界限 y=y+2;//防止超出界限 for(int i=-1;i<=1;i++) { for(int j=-1;j<=1;j++) if(a[x+i][y+j]==0) a[x+i][y+j]=1; } if(a[x][y-2]==0) a[x][y-2]=1; if(a[x][y+2]==0) a[x][y+2]=1; if(a[x-2][y]==0) a[x-2][y]=1; if(a[x+2][y]==0) a[x+2][y]=1; } //石头的位置 for(int h=m+2;h<=m+k+1;h++) { cin>>x>>y; x=x+2;//防止超出界限 y=y+2;//防止超出界限 for(int i=-2;i<=2;i++) for(int j=-2;j<=2;j++) a[x+i][y+j]=1; } for(int i=3;i<=n+2;i++) { for(int j=3;j<=n+2;j++) if(a[i][j]==0) sum++; } cout<



