题目
Description
图书馆占位的很厉害,只要去晚了一会就没有位置了。有些人占着位置却不来自习,这就造成了资源的浪费。现在我们的问题是一天当中有n个同学可能会来到同一个座位,假设上面有人则另外找座位,若没有人,则就可以占据此位置,直至你离开为止。为了最大化利用图书馆资源,我们要求的问题是一个位置最多能够被几个同学来用过。
Input
多组测试数据
第一行为n个同学 (1 <=n<=10000)
接下来n行就是每个同学的进入图书馆的时间和离开图书馆的时间,为了简化问题,我们假设时间值为整数。
Output
输出一个座位最多被几位同学占据。
Sample Input
6
1 3
2 4
3 6
7 9
10 11
5 7
Sample Output
4
代码块
//这道题的解题思路主要是,将,时间,按照后面的离开时间排序,进行判断即可,里面的判断方法,和之前我写的一篇 导弹防御,一样的判断,不懂的可以仔细看一下防御导弹的那一篇
import java.util.Scanner;
public class J1174 {
public static void main(String[] args) {
Scanner cn = new Scanner(System.in);
int n = cn.nextInt();
Place[] loc = new Place[n];
for (int i = 0; i < n; i++) {
int a = cn.nextInt();
int b = cn.nextInt();
loc[i] = new Place(a, b);
}
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (loc[i].getB() > loc[j].getB()) {
Place ll = loc[j];
loc[j] = loc[i];
loc[i] = ll;
}
}
}
int max = 0,x=1,t=0,i=0;
while (t!=x) {
int counts = 0, y = 0;
t = x;
for (int j = i + 1; j < n; j++) {
if (loc[i].getB() <= loc[j].getA()) {
counts++;
i = j;
} else {
y++;
if (y < 2)
x = j;
}
}
if (max < counts)
max = counts;
i = x;
}
System.out.println(max+1);
}
}
class Place {
private int a;
private int b;
public Place(int a, int b) {
this.a = a;
this.b = b;
}
public int getA() {
return this.a;
}
public int getB() {
return this.b;
}
}