欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

CSP认证2019-12-2-回收站选址-Java语言100分

程序员文章站 2022-06-21 15:02:29
回收站选址问题描述试题编号:201912-2试题名称:回收站选址时间限制:1.0s内存限制:512.0MBJava满分代码Java代码import java.io.InputStreamReader;import java.io.BufferedReader;import java.io.IOException;import java.util.HashMap;import java.util.HashSet;public class Main { p...

回收站选址

问题描述
试题编号: 201912-2
试题名称: 回收站选址
时间限制: 1.0s
内存限制: 512.0MB
CSP认证2019-12-2-回收站选址-Java语言100分
CSP认证2019-12-2-回收站选址-Java语言100分
CSP认证2019-12-2-回收站选址-Java语言100分
CSP认证2019-12-2-回收站选址-Java语言100分
Java满分代码
CSP认证2019-12-2-回收站选址-Java语言100分
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]是拿不了满分的。

本文地址:https://blog.csdn.net/qq_45772965/article/details/109867553