201912-2 回收站选址
试题编号: 201912-2
试题名称: 回收站选址
时间限制: 1.0s
内存限制: 512.0MB
问题描述:![在这里插入图片描述](https://img-blog.csdnimg.cn/20200806154345642.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzU5NzEyNg==,size_16,color_FFFFFF,t_70)
解题过程
本来开始打算直接用二维数组一步到位解决,但观察了下数据大小发现过大,故采用了vector容器去存储坐标。
由于n不是很大,故循环暴力解即可。
注意点是要四周都有邻居才能算入评分。
AC代码
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int n;
cin>>n;
vector < pair<int,int> > v;//记录x,y坐标
int x,y;
for(int i=0;i<n;i++)
{
cin>>x>>y;
v.push_back({x,y});
}
int score[5]={0};//得分情况
bool f1,f2,f3,f4;//判断是否有邻居
for(int i=0;i<n;i++)
{
x=v[i].first;
y=v[i].second;
f1=f2=f3=f4=0;
for(int j=0;j<n;j++)
{
if(x==v[j].first&&y+1==v[j].second)//上有
f1=1;
if(x==v[j].first&&y-1==v[j].second)//下有
f2=1;
if(x+1==v[j].first&&y==v[j].second)//左有
f3=1;
if(x-1==v[j].first&&y==v[j].second)//右有
f4=1;
}
if(f1&&f2&&f3&&f4)//邻居全有,开始评分
{
int c=0;
for(int j=0;j<n;j++)
{
if(x-1==v[j].first&&y+1==v[j].second)//左上有
c++;
if(x-1==v[j].first&&y-1==v[j].second)//左下有
c++;
if(x+1==v[j].first&&y+1==v[j].second)//右上有
c++;
if(x+1==v[j].first&&y-1==v[j].second)//右下有
c++;
}
score[c]++;
}
}
for(int i=0;i<5;i++)
cout<<score[i]<<endl;
return 0;
}