1174: 图书馆占位

时间:2021-05-21 17:49:40

题目

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;
    }
}