CSP 201912-2 回收站选址
思路: 使用STL库中的set进行查找,将每一个点的分数存入数组即可
代码:
#include<bits/stdc++.h>
#define repn(n) for(int i=1;i<=n;i++)
#define rep(n) for(int i=0;i<n;i++)
#define ll long long
using namespace std;
const int maxn=1e4;
int s[6];
struct Point{
int x;
int y;
}p[maxn];
set<pair<int,int> > vis;
bool fnd(int x,int y)
{
if(vis.count(pair<int,int>(x-1,y))==0)
return false;
if(vis.count(pair<int,int>(x+1,y))==0)
return false;
if(vis.count(pair<int,int>(x,y+1))==0)
return false;
if(vis.count(pair<int,int>(x,y-1))==0)
return false;
return true;
}
int getmark(int x,int y)
{
int ans=0;
if(vis.count(pair<int,int>(x+1,y+1)))
ans++;
if(vis.count(pair<int,int>(x+1,y-1)))
ans++;
if(vis.count(pair<int,int>(x-1,y+1)))
ans++;
if(vis.count(pair<int,int>(x-1,y-1)))
ans++;
return ans;
}
int main()
{
memset(s,0,sizeof(s));
int n;
cin>>n;
rep(n)
{
cin>>p[i].x>>p[i].y;
vis.insert(pair<int,int>(p[i].x,p[i].y));
}
rep(n)
{
if(fnd(p[i].x,p[i].y))
{
s[getmark(p[i].x,p[i].y)]++;
}
}
n=5;
rep(n)
{
cout<<s[i]<<endl;
}
return 0;
}