解题思路:
1.记录下每一点的x,y坐标(即使n很小也不要使用矩阵来存储,否则时间复杂度会很高)
2.依次遍历每一点,判断是否能找出四个点有垃圾,没有则直接跳过这个点
3。如果能找到,继续遍历,看其它四个点是否有垃圾,记录得分
#include<bits/stdc++.h>
using namespace std;
int res[1005][2]; //记录坐标
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>res[i][0]>>res[i][1];
}
int score[5]={0};
for(int i=0;i<n;i++)
{
int t=0; //垃圾数量
for(int j=0;j<n;j++)
{
if(i!=j)
{
if(res[i][0]==res[j][0]+1&&res[i][1]==res[j][1]) t++;
if(res[i][0]==res[j][0]-1&&res[i][1]==res[j][1]) t++;
if(res[i][0]==res[j][0]&&res[i][1]==res[j][1]+1) t++;
if(res[i][0]==res[j][0]&&res[i][1]==res[j][1]-1) t++;
}
}
if(t==4)
{
for(int j=0;j<n;j++)
{
if(i!=j)
{
if(res[i][0]==res[j][0]+1&&res[i][1]==res[j][1]+1) t++;
if(res[i][0]==res[j][0]-1&&res[i][1]==res[j][1]-1) t++;
if(res[i][0]==res[j][0]-1&&res[i][1]==res[j][1]+1) t++;
if(res[i][0]==res[j][0]+1&&res[i][1]==res[j][1]-1) t++;
}
}
score[t-4]++; //减去前面上下左右四个垃圾数量
}
}
for(int i=0;i<5;i++) cout<<score[i]<<endl;
return 0;
}