#include<iostream>
using namespace std;
class point
{
public:
int x = 0;
int y = 0;
int z = 0;
};
int main()
{
point* p;
int n;
int a = 0, b = 0, c = 0, d = 0, e = 0;
cin >> n;
p = new point[n];
for (int i = 0; i < n; i++)
cin >> p[i].x >> p[i].y;
for (int i = 0; i < n; i++)
{
int s = 0;
for (int j = 0; j < n; j++)
{
if (p[i].x - 1 == p[j].x && p[i].y == p[j].y)
s++;
else if (p[i].x + 1 == p[j].x && p[i].y == p[j].y)
s++;
else if (p[i].x == p[j].x && p[i].y - 1 == p[j].y)
s++;
else if (p[i].x == p[j].x && p[i].y + 1 == p[j].y)
s++;
if (s == 4)
p[i].z = 1;
}
}
for (int i = 0; i < n; i++)
{
int t = 0;
if (p[i].z == 1)
{
for (int j = 0; j < n; j++)
if ((p[i].x - 1 == p[j].x && p[i].y + 1 == p[j].y) || (p[i].x + 1 == p[j].x && p[i].y + 1 == p[j].y) || (p[i].x - 1 == p[j].x && p[i].y - 1 == p[j].y) || (p[i].x + 1 == p[j].x && p[i].y - 1 == p[j].y))
t++;
if (t == 0)
a++;
else if (t == 1)
b++;
else if (t == 2)
c++;
else if (t == 3)
d++;
else
e++;
}
}
delete[]p;
cout << a << endl << b << endl << c << endl << d << endl << e << endl;
return 0;
}
刚开始用的109*109的二维数组,然后就提示没有这么大的数组,所以我就建立了一个point类,其中x,y分别是点的横纵坐标,z是判断这个点的上下左右是否都有点的判断量,1代表这个点的上下左右四个方向都有点,0则相反。
先循环判断所有点z的取值,然后再判断z取1的点左上,右上,左下,右下是否满足题目条件。