解答:
#include <stdio.h>
int up(int xi,int yi,int xj,int yj);
int down(int xi,int yi,int xj,int yj);
int left(int xi,int yi,int xj,int yj);
int right(int xi,int yi,int xj,int yj);
int ul(int xi,int yi,int xj,int yj);
int ur(int xi,int yi,int xj,int yj);
int dl(int xi,int yi,int xj,int yj);
int dr(int xi,int yi,int xj,int yj);
int main(){
int n,i,x[1000],y[1000],a,b,c,d,e,j,cnt;
a=b=c=d=e=0;
scanf("%d",&n);
for(i=0; i<n; i++){
scanf("%d %d",&x[i],&y[i]);
}
for(i=0; i<n; i++){
cnt = 0;
for(j=0; j<n; j++){
if(j==i) continue;
if(cnt == 4){
break;
}
else if(up(x[i],y[i],x[j],y[j])){
cnt++;
}
else if(down(x[i],y[i],x[j],y[j])){
cnt++;
}
else if(left(x[i],y[i],x[j],y[j])){
cnt++;
}
else if(right(x[i],y[i],x[j],y[j])){
cnt++;
}
}
if(cnt == 4){
cnt = 0;
for(j=0; j<n; j++){
if(i==j) continue;
if(cnt == 4){
break;
}
else if(ul(x[i],y[i],x[j],y[j])){
cnt++;
}
else if(ur(x[i],y[i],x[j],y[j])){
cnt++;
}
else if(dl(x[i],y[i],x[j],y[j])){
cnt++;
}
else if(dr(x[i],y[i],x[j],y[j])){
cnt++;
}
}
switch(cnt){
case 0:a++;break;
case 1:b++;break;
case 2:c++;break;
case 3:d++;break;
case 4:e++;break;
}
}
}
printf("%d\n%d\n%d\n%d\n%d",a,b,c,d,e);
return 0;
}
int up(int xi,int yi,int xj,int yj){
int flag = 0;
if(xi == xj && yi+1 == yj){
flag = 1;
}
return flag;
}
int down(int xi,int yi,int xj,int yj){
int flag = 0;
if(xi == xj && yi-1 == yj){
flag = 1;
}
return flag;
}
int left(int xi,int yi,int xj,int yj){
int flag = 0;
if(xi-1 == xj && yi == yj){
flag = 1;
}
return flag;
}
int right(int xi,int yi,int xj,int yj){
int flag = 0;
if(xi+1 == xj && yi == yj){
flag = 1;
}
return flag;
}
int ul(int xi,int yi,int xj,int yj){
int flag = 0;
if(xi-1 == xj && yi+1 == yj){
flag = 1;
}
return flag;
}
int ur(int xi,int yi,int xj,int yj){
int flag = 0;
if(xi+1 == xj && yi+1 == yj){
flag = 1;
}
return flag;
}
int dl(int xi,int yi,int xj,int yj){
int flag = 0;
if(xi-1 == xj && yi-1 == yj){
flag = 1;
}
return flag;
}
int dr(int xi,int yi,int xj,int yj){
int flag = 0;
if(xi+1 == xj && yi-1 == yj){
flag = 1;
}
return flag;
}