华为5.7机考第一题充电桩问题Java代码实现

题目描述:

输入描述:

输出描述:

示例:

输入:

复制代码
3 5
0 0
1 4
5 6
2 3
7 8
3 -1

输出:

java 复制代码
5 3 -1 4
1 1 4 5
3 2 3 5

题解:Java中可以使用最大堆(通过最小堆模拟)来找到距离最近的k个点:

代码:

java 复制代码
import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] data = br.readLine().split(" ");
        
        int k = Integer.parseInt(data[0]);
        int n = Integer.parseInt(data[1]);
        int carX = Integer.parseInt(data[2]);
        int carY = Integer.parseInt(data[3]);
        
        // 边界条件
        if (k == 0 || k > n) {
            System.out.println("null");
            return;
        }
        
        // 使用优先队列模拟最大堆,存储(-distance, -id, x, y)
        PriorityQueue<int[]> heap = new PriorityQueue<>((a, b) -> {
            if (a[0] != b[0]) return a[0] - b[0];  // 按-distance升序(相当于distance降序)
            else return a[1] - b[1];               // 然后按-id升序
        });
        
        int idx = 4;
        for (int i = 1; i <= n; i++) {
            int x = Integer.parseInt(data[idx++]);
            int y = Integer.parseInt(data[idx++]);
            int d = Math.abs(carX - x) + Math.abs(carY - y);
            
            // 将元素加入堆(使用负值模拟最大堆)
            heap.offer(new int[]{-d, -i, x, y});
            
            // 保持堆的大小不超过k
            if (heap.size() > k) {
                heap.poll();
            }
        }
        
        // 提取结果并排序
        List<int[]> result = new ArrayList<>();
        while (!heap.isEmpty()) {
            int[] item = heap.poll();
            result.add(new int[]{-item[0], -item[1], item[2], item[3]});
        }
        
        // 按距离升序、编号升序排序
        result.sort((a, b) -> {
            if (a[0] != b[0]) return a[0] - b[0];
            else return a[1] - b[1];
        });
        
        // 输出结果
        for (int[] item : result) {
            System.out.println(item[1] + " " + item[2] + " " + item[3] + " " + item[0]);
        }
    }
}
相关推荐
安卓开发者14 小时前
鸿蒙NEXT UI Design Kit:打造高端精致界面的新利器
ui·华为·harmonyos
在下村刘湘14 小时前
Maven setting文件中<mirrors>(镜像)和 <servers>两个标签的区别
java·maven
fatfishccc15 小时前
(四)优雅重构:洞悉“搬移特性”的艺术与实践
java·驱动开发·intellij-idea·软件研发·后端开发·代码重构·搬移
努力也学不会java15 小时前
【设计模式】访问者模式
java·设计模式·访问者模式
Mr.456715 小时前
idea常用设置和常用插件---持续更新(自己留存备份)
java·ide·intellij-idea
安卓开发者15 小时前
鸿蒙NEXT系统Picker全解析:安全高效的用户资源访问之道
安全·华为·harmonyos
安卓开发者15 小时前
鸿蒙NEXT安全控件解析:实现精准权限管控的新范式
安全·华为·harmonyos
老华带你飞15 小时前
寝室快修|基于SprinBoot+vue的贵工程寝室快修小程序(源码+数据库+文档)
java·数据库·vue.js·spring boot·小程序·毕设·贵工程寝室快修
杨杨杨大侠15 小时前
手把手教你写 httpclient 框架(八)- 实战案例集锦
java·http·github
肖老师xy15 小时前
uniapp 苹果端bug合集
java·服务器·uni-app