算法1
使用set容器
关键是使用了它 count 方法可以自由寻找集合中元素的功能
C++ 代码
/*
1. set 的用法
set.insert()
set迭代器:
set<?>::iterator it;
set.count 和 set.find 的区别;
set.find若找不到则返回set.end() ,找到则返回指向该值的指针
set.count若找不到返回0,找到返回1
*/
#include<iostream>
#include<set>
using namespace std;
typedef long long ll;
set<pair<ll,ll>> trush;
int n;
int ans[6];
ll x,y;
ll tmpx,tmpy;
set<pair<ll,ll>>::iterator it;
int movex[4] = {1,1,-1,-1};
int movey[4] = {-1,1,-1,1};
int shx[4] = {0,1,-1,0};
int shy[4] = {-1,0,0,1};
bool judge_is(int xx,int yy)
{
int tmx,tmy;
for(int i=0;i<4;i++)
{
tmx = xx+shx[i];
tmy = yy+shy[i];
if(!trush.count({tmx,tmy}))
return false;
}
return true;
}
int main()
{
cin>>n;
while(n--)
{
scanf("%lld%lld",&x,&y);
trush.insert({x,y});
}
for(it = trush.begin();it!=trush.end();it++)
{
x = it->first;
y = it->second;
if(judge_is(x,y))
{
int kg = 0;
for(int i=0;i<4;i++)
{
tmpx=x+movex[i];
tmpy=y+movey[i];
if(trush.count({tmpx,tmpy}))
kg++;
}
ans[kg]++;
}
}
for(int i=0;i<5;i++)
{
printf("%d\n",ans[i]);
}
return 0;
}