- 为了庆祝中国共产党成立100周年,某公园将举行多场文艺表演,很多演出都是同时进行,一个人只能同时观看一场演出,且不能迟到早退,由于演出分布在不同的演出场地,所以连续观看的演出最少有15分钟的时间间隔,小明是一个狂热的文艺迷,想观看尽可能多的演出, 现给出演出时间表,请帮小明计算他最多能观看几场演出。
- 第一行为一个数N,表示演出场数,1<=N<=1000,接下来N行,每行两个空格分割的整数,第一个整数T表示演出的开始时间,第二个整数L表示演出的持续时间,T和L的单位为分钟,0<=T<=1440,0<L<=100.输出最多能观看的演出场数。
例如:
-
输入:
2
720 120
840 120 -
输出:
1
-
输入:
2
0 60
90 60 -
输出:
2
import java.util.Arrays;
import java.util.Scanner;
import java.util.Comparator;
public class Test {
public static class Perform {
int start;
int duration;
public Perform(int s, int d) {
start = s;
duration = d;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
Perform[] performs = new Perform[N];
for (int i = 0; i < N; i++) {
int start = sc.nextInt();
int duration = sc.nextInt();
performs[i] = new Perform(start, duration);
}
//用了java8 的lambda 表达式,按照表演结束时间排序
Arrays.sort(performs, Comparator.comparingInt(p -> (p.duration+p.start)));
int count = 0;
int lastMoment = 0;
for (int i = 0; i < N; i++) {
//每次选择表演时间在上次表演结束后的第一个节目
if (performs[i].start >= lastMoment) {
count++;
lastMoment = performs[i].start + performs[i].duration + 15;
}
}
System.out.println(count);
}
}