#include<bits/stdc++.h>
using namespace std;
int n,x,y,i;
int a[2000];
int score[5];
map<int, map<int, int>> mp;
int main()
{
cin >> n;
int m=n;
while(m--)
{
cin >> x >> y;
mp[x][y]=1;
a[i]=x;
a[i+1]=y;
i+=2;
}
for(i=0;i<=2*n-1;i+=2)
{
int sum=0;
if(mp[a[i]+1][a[i+1]]&&mp[a[i]-1][a[i+1]]&&mp[a[i]][a[i+1]+1]&&mp[a[i]][a[i+1]-1])
{
if(mp[a[i]+1][a[i+1]+1])
sum++;
if(mp[a[i]+1][a[i+1]-1])
sum++;
if(mp[a[i]-1][a[i+1]+1])
sum++;
if(mp[a[i]-1][a[i+1]-1])
sum++;
score[sum]++;
}
}
for(i=0;i<5;i++)
{
cout << score[i] <<endl;
}
return 0;
}
用 map<int, map<int, int>> mp标记垃圾位置(mp[x][y]),效果同二维数组,但不用担心越界问题
遍历垃圾位置,先判断上下左右四个位置是否有垃圾,再判断四个角是否有垃圾,每有一个角有垃圾,sum++,记录个数,最后对应的个数下标的数组++(初始均为0)