JAVA CCF-201912-2 回收站选址

笑着哭i 提交于 2020-02-12 14:19:30

欢迎访问我的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);
    }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!