c
#include <stdio.h>
#include <malloc.h>
int main (void)
{
int n, m, k;
scanf("%d %d %d", &n, &m, &k);
bool ** p;
p = (bool **) malloc (sizeof(bool *) * n);
int i;
for (i = 0; i < n; ++i)
{
p[i] = (bool *) malloc (sizeof(bool) * n);
}
int * x_m, * y_m, * x_k, * y_k;
x_m = (int *) malloc (sizeof(int) * m);
y_m = (int *) malloc (sizeof(int) * m);
x_k = (int *) malloc (sizeof(int) * k);
y_k = (int *) malloc (sizeof(int) * k);
for (i = 0; i < m; ++i)
{
scanf("%d %d", &x_m[i], &y_m[i]);
x_m[i] -= 1;
y_m[i] -= 1;
}
for (i = 0; i < k; ++i)
{
scanf("%d %d", &x_k[i], &y_k[i]);
x_k[i] -= 1;
y_k[i] -= 1;
}
int x, y;
for (i = 0; i < m; ++i)
{
for (x = x_m[i] - 1; x <= x_m[i] + 1; ++x)
{
for (y = y_m[i] - 1; y <= y_m[i] + 1; ++y)
{
if (x >= 0 && x < n)
{
if (y >= 0 && y < n)
{
p[x][y] = true;
}
}
}
}
if (x_m[i] - 2 >= 0)
{
p[x_m[i] - 2][y_m[i]] = true;
}
if (x_m[i] + 2 < n)
{
p[x_m[i] + 2][y_m[i]] = true;
}
if (y_m[i] + 2 < n)
{
p[x_m[i]][y_m[i] + 2] = true;
}
if (y_m[i] - 2 >= 0)
{
p[x_m[i]][y_m[i] - 2] = true;
}
}
for (i = 0; i < k; ++i)
{
for (x = x_k[i] - 2; x <= x_k[i] + 2; ++x)
{
for (y = y_k[i] - 2; y <= y_k[i] + 2; ++y)
{
if (x >= 0 && x < n)
{
if (y >= 0 && y < n)
{
p[x][y] = true;
}
}
}
}
}
int count = 0;
for (x = 0; x < n; ++x)
{
for (y = 0; y < n; ++y)
{
if (p[x][y] != true)
{
count++;
}
}
}
printf("%d", count);
free (p);
free (x_m);
free (x_k);
free (y_m);
free (y_k);
return 0;
}
我发现当n超过9的时候单个火把或单个萤石结果不对