畜栏保留问题(java)

题目

​​​​​​​​​​​OpenJudge - 4144:畜栏保留问题


畜栏保留问题(java)_第1张图片


解题思路

先按开始时间排序,随后自定义优先级队列。


题目代码

import java.util.Scanner;
import java.util.Queue;
import java.util.PriorityQueue;
import java.util.Arrays;
import java.util.Comparator;

public class Main {
    static class messenge{
        int start;
        int end;
        int id;
        public messenge(int start, int end, int id) {
            this.start = start;
            this.end = end;
            this.id = id;
        }
    }
    static Comparator comparator = new Comparator(){
        public int compare(messenge m1, messenge m2) {
            return m1.end - m2.end;
        }
    };
    
    public static void main(String args[]) {
        Scanner in = new Scanner(System.in);
        Queue queue = new PriorityQueue(comparator);
        int n = in.nextInt();
        messenge[] m = new messenge[n];
        int[] use = new int[n];
        
        for(int i = 0; i < n; i++) {
            m[i] = new messenge(in.nextInt(), in.nextInt(), i);
        }
        
        Arrays.sort(m, (a, b) -> {
            return a.start - b.start;
        });
        
        int count = 0;
        for(int i = 0; i < n; i++) {
            if(!queue.isEmpty() && queue.peek().end < m[i].start) {
                use[m[i].id] = use[queue.peek().id];
                queue.poll();
            }else {
                count++;
                use[m[i].id] = count;
            }
            queue.add(m[i]);
        }
        System.out.println(count);
        for(int i = 0; i < n; i++) {
            System.out.println(use[i]);
        }
    }
}

你可能感兴趣的:(题目记录,java)