ccf201912-2回收站选址
要判断的点不多,每个点都遍历判断一下就可以了。
#include <stdio.h>
int main(){
int n;//n个垃圾点
int i,j;
int move[4][2] = {1,0,-1,0,0,1,0,-1};//上下左右移动
int movexie[4][2] = {1,1,1,-1,-1,1,-1,-1};// 对角线移动
int flag,flagScore;
int result[5] = {0};//记录每个分数的点数
scanf("%d",&n);
int array[n][2];
for(i = 0;i < n;i ++){
scanf("%d%d",&array[i][0],&array[i][1]);
}
//
for(i = 0;i < n;i ++){
flag = 0;//判断是否有资格
for(j = 0;j < n;j ++){//判断是否与其他的垃圾点相邻 上下左右
for(int k = 0; k< 4;k ++){
if(array[i][0]+move[k][0] == array[j][0]
&& array[i][1]+move[k][1] == array[j][1])
flag ++;
}
}
//上下左右都有垃圾,可建为回收站
if(flag == 4){
flagScore = 0;//得分
for(j = 0;j < n;j ++){//判断是否与其他垃圾点相邻 对角线
for(int k = 0;k < 4;k ++){
if(array[i][0]+movexie[k][0]==array[j][0]
&&array[i][1]+movexie[k][1]==array[j][1])
flagScore++;
}
}
result[flagScore]++;//
}
}
for(i = 0;i < 5;i ++){
printf("%d\n",result[i]);
}
return 0;
}