样例1输入
7
1 2
2 1
0 0
1 1
1 0
2 0
0 1
样例1输出
0
0
1
0
0
样例2输入
2
0 0
-100000 10
样例2输出
0
0
0
0
0
样例3输入
11
9 10
10 10
11 10
12 10
13 10
11 9
11 8
12 9
10 9
10 11
12 11
样例3输出
0
2
1
0
0
代码:
#include<stdio.h>
#include<math.h>
const long long int maxn = 1e9 + 5;
//每个点用一个结构体来定义,包含他的x,y坐标
struct node{
long long int x, y;
}DATA[1005];
int main(){
int n, j, i, len = 0, res[5] = {0};
scanf("%d",&n);
long long int xx, yy;
while(n--){
scanf("%lld%lld", &xx, &yy);
DATA[len].x = xx;
DATA[len].y = yy;
len++;
}
for(i=0;i<len;i++){
int count = 0;
for(j=0;j<len;j++){
//判断两结点是否相邻
if(abs(DATA[j].x-DATA[i].x)==1 && DATA[j].y==DATA[i].y || abs(DATA[j].y-DATA[i].y)==1 && DATA[j].x==DATA[i].x){
count++;
}
}
if(count==4){ //表示存在可选地址的结点
int key = 0;
for(j=0;j<len;j++){
if(abs(DATA[j].x-DATA[i].x)==1 && abs(DATA[j].y-DATA[i].y)==1) key++;
}
res[key]++;
}
}
for(i=0;i<5;i++){
printf("%d\n", res[i]);
}
return 0;
}