回收站选址
问题描述
试题编号: 201912-2
试题名称: 回收站选址
时间限制: 1.0s
内存限制: 512.0MB
Java满分代码
Java代码
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
public class Main {
public static void main(String [] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.valueOf(br.readLine());
int[][] point = new int[n+2][2];
int[] res = new int[5];// 代表分 0 1 2 3 4
HashMap<Integer, HashSet<Integer>> map = new HashMap<>();
for(int i = 1;i <= n;i++){
String[] str = br.readLine().trim().split(" ");
int x = Integer.valueOf(str[0]);
int y = Integer.valueOf(str[1]);
point[i][0] = x; // 记录垃圾坐标
point[i][1] = y;
if(map.containsKey(x)){
map.get(x).add(y);
}else{
map.put(x, new HashSet<Integer>());
map.get(x).add(y);
}
}
for(int i = 1;i <= n;i++){
// 当前列存在左右列
if(map.containsKey(point[i][0]-1) && map.containsKey(point[i][0]+1)){
HashSet<Integer> set_c = map.get(point[i][0]); // 当前列
HashSet<Integer> set_r = map.get(point[i][0]+1); // 当前列右边一列
HashSet<Integer> set_l = map.get(point[i][0]-1); // 当前列左边一列
if(set_c.contains(point[i][1]+1) && set_c.contains(point[i][1]-1) &&
set_r.contains(point[i][1]) && set_l.contains(point[i][1])){ // 可以建回收站
int score = 0; // 得分
if(set_l.contains(point[i][1]+1))
score++;
if(set_l.contains(point[i][1]-1))
score++;
if(set_r.contains(point[i][1]+1))
score++;
if(set_r.contains(point[i][1]-1))
score++;
res[score]++; // 该分数的回收站个数+1
}
}
}
for(int i = 0;i < 5;i++)
System.out.println(res[i]);
}
}
本题坐标x,y 取到到了109,不可以开这么大的数组,也就是如果使用arr[x][y]是拿不了满分的。