欢迎访问我的CCF认证解题目录
题目描述
思路过程
新建一个HashMap<Integer, HashSet<Integer>>
来存储坐标信息。
映射规则:row->col集合。
用int[][] way1 = {{0,1}, {0,-1}, {-1,0}, {1,0}}
来遍历上下左右四个方向,如果四个方向都存在垃圾,则表明可以建立垃圾站。
用int[][] way2 = {{1,1}, {1,-1}, {-1,1}, {-1,-1}}
来遍历四个斜方向,如果存在垃圾,则分数+1。
代码
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] cnt = new int[5];//结果
int[][] way1 = {{0,1}, {0,-1}, {-1,0}, {1,0}};//上下左右四个方向
int[][] way2 = {{1,1}, {1,-1}, {-1,1}, {-1,-1}};//四个斜方向
HashMap<Integer, HashSet<Integer>> map = new HashMap<>();//行:列集合
for ( int i = 0; i < n; i++ ) {
int row = in.nextInt(), col = in.nextInt();
if ( !map.containsKey(row) ) map.put(row, new HashSet<>());
map.get(row).add(col);
}
for ( int row: map.keySet() ) {
for ( int col: map.get(row) ) {
boolean flag = true;//上下左右是否有垃圾
for ( int[] way: way1 ) {
int trow = row + way[0], tcol = col + way[1];
if ( !(map.containsKey(trow) && map.get(trow).contains(tcol)) ) {
flag = false;
break;
}
}
if ( flag ) {
int count = 0;//斜方向有多少个垃圾
for ( int[] way: way2 ) {
int trow = row + way[0], tcol = col + way[1];
if ( map.containsKey(trow) && map.get(trow).contains(tcol) ) count++;
}
cnt[count]++;
}
}
}
for ( int val: cnt ) System.out.println(val);
}
}
来源:CSDN
作者:不断奔跑
链接:https://blog.csdn.net/weixin_43732798/article/details/104277543