分析:暴力枚举,由于测试点有负数,用二维数组不方便解决。所以建立结构体,先把所有垃圾坐标存入结构体中,再依次遍历每个垃圾点,如果满足要求则记录,遍历完毕后输出。
满分代码:
#include <stdio.h>
#include <iostream>
using namespace std;
struct laji{
int x; //x坐标
int y; //y坐标
int flag=0; //是否是垃圾点,如果flag=4,则为垃圾点
int grade=0; //得分
}lj[1000+10];
int main()
{
int n,xi=0,yi=0,arr[6]={0};
cin>>n;
for(int i=0;i<n;i++){
cin>>lj[i].x>>lj[i].y;
lj[i].grade=0;
}
for(int i=0;i<n;i++){
xi=lj[i].x,yi=lj[i].y;
for(int j=0;j<n;j++){
if((lj[j].x==xi+1 && lj[j].y==yi) || (lj[j].x==xi && lj[j].y==yi+1) || (lj[j].x==xi-1 && lj[j].y==yi) || (lj[j].x==xi && lj[j].y==yi-1))
lj[i].flag++;
if((lj[j].x==xi+1 && lj[j].y==yi+1) || (lj[j].x==xi+1 && lj[j].y==yi-1) || (lj[j].x==xi-1 && lj[j].y==yi+1) || (lj[j].x==xi-1 && lj[j].y==yi-1))
lj[i].grade++;
}
if(lj[i].flag==4){
arr[lj[i].grade]++;
}
}
for(int i=0;i<5;i++){
cout<<arr[i]<<endl;
}
return 0;
}