华为OD【模拟消息队列】


import java.util.*;

/**
 * @author Pickle
 * @since 2025/4/22 18:54
 */
public class Demo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String[] sender = scanner.nextLine().split(" ");
        String[] receiver = scanner.nextLine().split(" ");
        //M个接受者
        int M = receiver.length / 2;
        HashMap<String,String> map = new HashMap<>();
        //记录发送消息的时刻
        List<String> time = new ArrayList<>();
        for(int i = 0; i < sender.length; i+=2){
            time.add(sender[i]);
            map.put(sender[i],sender[i+1]);
        }
        Collections.sort(time);
        ArrayList<ArrayList<String>> message = new ArrayList<>(M);
        for(int i = 0; i < M; i++){
            message.add(new ArrayList<>());
        }
        //挨个遍历发送消息的时间,从高优先级到低优先级看看该发送时间是否落在接受者开放的区间内
        for(int i = 0; i < time.size(); i++){
            for(int j = receiver.length - 1; j >= 0; j-=2){
                if( Integer.parseInt(time.get(i)) >= Integer.parseInt(receiver[j-1]) &&
                    Integer.parseInt(time.get(i)) < Integer.parseInt(receiver[j])){
                    message.get(j/2).add(map.get(time.get(i)));
                    break;
                }
            }
        }
        for(int i = 0; i < M; i++){
            if(message.get(i).size() != 0) {
                for(int j = 0; j < message.get(i).size();j++){
                    System.out.print(message.get(i).get(j) + " ");
                }
            }
            else{
                System.out.print(-1);
            }
            if(i != M-1){
                System.out.println();
            }
        }
    }
}

posted @ 2025-04-22 21:22  破忒头头  阅读(53)  评论(0)    收藏  举报