题目
OpenJudge - 4144:畜栏保留问题
解题思路
先按开始时间排序,随后自定义优先级队列。
题目代码
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<messenge> comparator = new Comparator<messenge>(){
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<messenge> queue = new PriorityQueue<messenge>(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]);
}
}
}

714

被折叠的 条评论
为什么被折叠?



