201912-2_回收站选址
时间限制: 1.0s
内存限制: 512.0MB
题目背景:
开学了,可是校园里堆枳了不少垃圾杂物。
热心的同学们纷纷自发的来清理,为学校注入正能量~
题目描述:
通过无人机航拍我们己经知晓了
n
n
n处尚待清理的垃圾位置,其中第
i
(
1
≦
i
≦
n
)
i(1 \leqq i \leqq n)
i(1≦i≦n)处的坐标为
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi),保证所有的坐标均为整数。
我们希望在垃圾集中的地方建立些回收站。具体来说,对于一个位
n
(
x
,
y
)
n (x,y)
n(x,y)是否适合建立回收站,我们主要考虑以下几点:
- ( x , y ) (x,y) (x,y)必须是整数坐标,且该处存在垃圾;
- 上下左右四个邻居位置,即 ( x , y + 1 ) 、 ( x , y − 1 ) 、 ( x + 1 , y ) (x,y+ 1)、(x,y- 1)、(x+ 1,y) (x,y+1)、(x,y−1)、(x+1,y)和 ( x − 1 , y ) (x- 1,y) (x−1,y)处,必须全部存在垃圾;
- 进一步地,我们会对满足上述两个条件的选址进行评分,分数为不大于4的自然数,表示在
(
x
±
1
,
y
±
1
)
(x± 1,y±1)
(x±1,y±1)四个对角位置中有几处存在垃圾。
现在,请你统计一下每种得分的选址个数。
输入格式:
从标准输入读入数据。
输入总共有
n
+
1
n+1
n+1行。
第
1
1
1行包含一个正整数
n
n
n,表示已查明的垃圾点个数。
第
1
+
i
1+i
1+i行
(
1
≦
i
≦
n
)
(1\leqq i\leqq n)
(1≦i≦n)包含由一个空格分隔的两个整数
x
i
x_i
xi和
y
i
y_i
yi,表示第
i
i
i处垃圾的坐标。
保证输入的
n
n
n个坐标互不相同。
输出格式:
输出到标准输出。
输出共五行,每行一个整数,依次表示得分为
0
、
1
、
2
、
3
0、1、2、3
0、1、2、3和
4
4
4的回收站选址个数。
样例1:
输入
7
1 2
2 1
0 0
1 1
1 0
2 0
0 1
输出:
0
0
1
0
0
解释
样例2:
输入
2
0 0
-100000 10
输出:
0
0
0
0
0
解释
不存在可选地址
样例3
输入
11
9 10
10 10
11 10
12 10
13 10
11 9
11 8
12 9
10 9
10 11
12 11
输出
0
2
1
0
0
解释
子任务
提示
代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(bf.readLine());
int[][] point=new int[n][2];
for(int i=0;i<n;i++){
String[] line=bf.readLine().split(" ");
point[i][0]=Integer.parseInt(line[0]);
point[i][1]=Integer.parseInt(line[1]);
}
int[] result=new int[5];
for(int i=0;i<n;i++) {
int num=0,key=0;
for(int j=0;j<n;j++) {
if(point[i][0]+1==point[j][0] && point[i][1]==point[j][1]) {
num++;
}
if(point[i][0]-1==point[j][0] && point[i][1]==point[j][1]) {
num++;
}
if(point[i][0]==point[j][0] && point[i][1]+1==point[j][1]) {
num++;
}
if(point[i][0]==point[j][0] && point[i][1]-1==point[j][1]) {
num++;
}
}
if(num==4) {
for(int j=0;j<n;j++){
if(point[i][0]+1==point[j][0] && point[i][1]+1==point[j][1]) {
key++;
}
if(point[i][0]+1==point[j][0] && point[i][1]-1==point[j][1]) {
key++;
}
if(point[i][0]-1==point[j][0] && point[i][1]-1==point[j][1]) {
key++;
}
if(point[i][0]-1==point[j][0] && point[i][1]+1==point[j][1]) {
key++;
}
}
result[key]++;
}
}
for (int num:result){
System.out.println(num);
}
}
}