• CSP认证2019-12-2-回收站选址-(Java)100分


    回收站选址

    问题描述
    试题编号: 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]是拿不了满分的。

  • 相关阅读:
    周五笔记
    python2.0代码重构为3.0一日记
    小白使用Bert跑分类模型
    andrew ng 深度学习 网易云课堂课程
    andrew ng machine learning week9 异常检测和推荐系统
    解决端口占用问题
    postgresqlmysql删除数据表中字段的回车和换行
    echarts常用的属性修改
    后端返回文件流,用blog方式下载 type 值
    antD vue 遇到的一些问题处理
  • 原文地址:https://www.cnblogs.com/jiaohuadehulike/p/14294992.html
Copyright © 2020-2023  润新知