zoukankan      html  css  js  c++  java
  • 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]是拿不了满分的。

  • 相关阅读:
    dnsever 邮件记录
    用于显示上个月和下个月_PHP
    JSON学习
    ASP生成新会员编号
    godaddy_关于产品退款
    Switch Case语句中多个值匹配同一个代码块的写法
    网闸与防火墙的比较
    bench.sh 跑分测速
    Kcptun加速SS
    linux 安全狗
  • 原文地址:https://www.cnblogs.com/jiaohuadehulike/p/14294992.html
Copyright © 2011-2022 走看看