#include<iostream>
using namespace std;
int main()
{
int n,m,k,i,j,ans[101][101],wer=0;
int dx1[13]={-2,-1,-1,-1,0,0,0,0,0,1,1,1,2},dy1[13]={0,-1,0,1,-2,-1,0,1,2,-1,0,1,0};
int dx2[25]={-2,-2,-2,-2,-2,-1,-1,-1,-1,-1,0,0,0,0,0,1,1,1,1,1,2,2,2,2,2},dy2[25]={-2,-1,0,1,2,-2,-1,0,1,2,-2,-1,0,1,2,-2,-1,0,1,2,-2,-1,0,1,2};
cin>>n>>m>>k;
for(int p=1;p<=m;p++)
{
cin>>i>>j;
for(int u=0;u<=12;u++)
{
int a=i+dx1[u];
int b=j+dy1[u];
if(a>0&&a<=n&&b>0&&b<=n)ans[a][b]=1;
}
}
for(int p=1;p<=k;p++)
{
cin>>i>>j;
for(int u=0;u<=24;u++)
{
int a=i+dx2[u];
int b=j+dy2[u];
if(a>0&&a<=n&&b>0&&b<=n)ans[a][b]=1;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(ans[i][j]==0)wer++;
}
}
cout<<wer;
}
另外 @yuhe2012,你的代码可以改成 (e.g.)
if(x-2>=0&&x-2<n&&y>=0&&y<n) {
a[x-2][y]=1;
}
因为你开的n×n,输n会越界。