本题中测试点保证1<=n<=10^3,并不是很大,所以可以先尝试直接使用暴力循环,可以发现提交结果是全部正确。
代码如下:
#include<iostream>
using namespace std;
struct point{
int x;
int y;
};
int main(){
int n,end[5]={0};
cin>>n;
point recycle[n];
for(int i=0;i<n;i++){
cin>>recycle[i].x>>recycle[i].y;
}
for(int i=0;i<n;i++){
int record=0,sum=0;
for(int j=0;j<n;j++){
if(recycle[i].x==recycle[j].x&&recycle[i].y==recycle[j].y-1)
record++;
if(recycle[i].x==recycle[j].x&&recycle[i].y==recycle[j].y+1)
record++;
if(recycle[i].x==recycle[j].x-1&&recycle[i].y==recycle[j].y)
record++;
if(recycle[i].x==recycle[j].x+1&&recycle[i].y==recycle[j].y)
record++;
if(recycle[i].x==recycle[j].x+1&&recycle[i].y==recycle[j].y+1)
sum++;
if(recycle[i].x==recycle[j].x+1&&recycle[i].y==recycle[j].y-1)
sum++;
if(recycle[i].x==recycle[j].x-1&&recycle[i].y==recycle[j].y+1)
sum++;
if(recycle[i].x==recycle[j].x-1&&recycle[i].y==recycle[j].y-1)
sum++;
}
if(record==4)
end[sum]++;
}
for(int i=0;i<=4;i++){
cout<<end[i]<<endl;
}
return 0;
}