题目
题目可以在官网中查看到哟!
结果
算法分析
这个题目还是相对比较简单的,看题目的数据范围之后,我们发现坐标的范围还是很大的,但是n是比较小的,因此,我们可以放心地遍历n个垃圾站。根据题目,回收站的位置要满足如下两个条件:第一个是回收站必须存在垃圾,也就是说回收站必须建立在n个垃圾站之上;第二个是回收站上下左右四个方向必须存在垃圾。
分析完题目,小编通过遍历n个垃圾站,来判断那些垃圾站满足成为回收站的要求即可,之后在统计满足要求的回收站选址的得分即可。具体代码如下。
完整满分代码
#include<iostream>
#include<cstdio>
using namespace std;
int n;
struct node
{
int x, y;
int grade;
int type;
}N[2000];
int num[5];
int main()
{
int i, j;
cin >> n;
//输入n个垃圾站
for (i = 1; i <= n; i++)
cin >> N[i].x >> N[i].y;
for (i = 1; i <= n; i++)
{
int flag = 0, score = 0;
for (j = 1; j <= n; j++)
{
if (N[j].x == N[i].x - 1 && N[j].y == N[i].y ||
N[j].x == N[i].x + 1 && N[j].y == N[i].y ||
N[j].x == N[i].x && N[j].y == N[i].y - 1 ||
N[j].x == N[i].x && N[j].y == N[i].y + 1)
{
flag++;
}
}
//周围上下左右四个方向都存在垃圾
if (flag == 4)
{
//标记该选址符合条件
N[i].type = 1;
//统计得分
for (j = 1; j <= n; j++)
{
if (N[j].x == N[i].x - 1 && N[j].y == N[i].y - 1 ||
N[j].x == N[i].x - 1 && N[j].y == N[i].y + 1 ||
N[j].x == N[i].x + 1 && N[j].y == N[i].y - 1 ||
N[j].x == N[i].x + 1 && N[j].y == N[i].y + 1)
{
score++;
}
}
N[i].grade = score;
}
}
//统计符合条件的选址的各个分数的个数
for (i = 1; i <= n; i++)
if (N[i].type == 1)
num[N[i].grade]++;
//输出
for (i = 0; i < 5; i++)
cout << num[i] << endl;
return 0;
}