201912-2
问题描述
通过无人机航拍我们己经知晓了n处尚待清理的垃圾位置,其中第i(1≤i≤n)
处的坐标为(x,y),保证所有的坐标均为整数。
我们希望在垃圾集中的地方建立些回收站。具体来说,对于一个位置(x,y)是否适合建立回收站,我们主要考虑以下几点:
(x,y)必须是整数坐标,且该处存在垃圾;
·上下左右四个邻居位置,即(x,y+1)、(x,y-1)、(x+1,y)和(x-1,y)处,必须全部存在垃圾:
●进一步地,我们会对满足上述两个条件的选址进行评分,分数为不大于4的自然数,表示在(x±1,y±1)四个对角位置中有几处存在垃圾现在,请你统计一下每种得分的选址个数。
输入格式
从标准输入读入数据。
输入总共有n+1行。
第1行包含一个正整数n,表示已查明的垃圾点个数。
第1+i行(l≤i≤n)包含由一个空格分隔的两个整数x和y,表示第i处垃圾的坐标。
保证输入的n个坐标互不相同。
输出格式
输出到标准输出。
输出共五行,每行一个整数,依次表示得分为0、1、2、3和4的回收站选址个数。
样例输入
7
1 2
2 1
0 0
1 1
1 0
2 0
0 1
样例输出
0
0
1
0
0
算法思想
使用结构体存储坐标,将坐标存入arr[]中,遍历坐标,再设置两个数组,把zb1[]和zb2[]分别存放上下左右、四个角的坐标,遍历整个使用count计数此坐标上下左右有没有在坐标数组中,如果有,count加1,等到count等于4才可以在这里建立回收站,再遍历zb2,使用score计数此坐标四个角的得分,最后得到几分就将s2下标为几的值+1,表明此分数的回收站有几个。
数据结构设计
struct Zuobiao{
int x;
int y;
};
算法步骤
1创建结构体数组arr[]
2输入n,输入各个坐标并存入arr中
3初始化存放分数的数组s
4 循环遍历数组arr中的坐标,将其上下左右的坐标存入数组zb1中,并将count=0
5 若上下左右中有和输入的垃圾堆坐标相同的,就将count+1
6判断count是否等于4,若等于,则计算此坐标四个角的垃圾堆个数
7将此坐标四个角的坐标存入zb2中
8循环遍历,若有角有坐标相同,将score加1
9 将下标为score的值加1
实现技术
判断坐标的上下左右的垃圾堆个数
将上下左右的坐标放入数组zb1,再和输入的坐标做对比,若相同,就将count加1,当等于4的时候,说明上下左右都有垃圾堆
判断四个角的分数
和判断上下左右的方法一样,若相同,就将score加1,但是要用一个数组s,下标为score,这样就可以算出分数的回收站个数
代码实现
#include<iostream>
using namespace std;
struct Zuobiao{
int x;
int y;
};
int main()
{
int n;
cin>>n;
Zuobiao arr[n];