题目
【题意】
思路:
思路很简单,遍历输入的每个点判断是否上下左右有垃圾,如果有垃圾再判断对角线上是否有垃圾来判断垃圾站的分数。
我想记录一下用map来写程序的过程,好久没有使用mp了都快不会用了。
代码:
#include<iostream>
#include<map>
using namespace std;
struct Node
{
int x,y;
Node(){}
Node(int a,int b)
{
x = a;
y = b;
}
bool operator<(const Node&aa) const
{
if(x!=aa.x)
return x<aa.x;
else
return y<aa.y;
}
};
map<Node,int> mp;
map<Node,int>::iterator it;
int count[5]={0};
int xa[4]={0,0,1,-1};
int ya[4]={1,-1,0,0};
bool found(Node node)
{
for(int i=0;i<4;i++)
{
int x = node.x+xa[i];
int y = node.y+ya[i];
if(mp.find(Node(x,y))==mp.end())
{
return false;
}
}
if(mp.find(Node(node.x+1,node.y+1))!=mp.end())
mp[node]++;
if(mp.find(Node(node.x-1,node.y+1))!=mp.end())
mp[node]++;
if(mp.find(Node(node.x+1,node.y-1))!=mp.end())
mp[node]++;
if(mp.find(Node(node.x-1,node.y-1))!=mp.end())
mp[node]++;
return true;
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
int x,y;
cin>>x>>y;
mp[Node(x,y)]=0;
}
for(it=mp.begin();it!=mp.end();it++)
{
if(found(it->first))
{
count[it->second]++;
}
}
for(int i=0;i<5;i++)
cout<<count[i]<<endl;
return 0;
}