此题跟观看文艺汇演的解法完全一致
package od;
import java.util.*;
/**
* @version Ver 1.0
* @date 2025/6/20
* @description 观看文艺汇演
*/
public class WatchMovie {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] ints = Arrays.stream(sc.nextLine().split("\\s+")).mapToInt(Integer::parseInt).toArray();
int m = ints[1];//手速
List<Movie> movies = new ArrayList<>(ints[0]);
for (int i = 0; i < ints[0]; i++) {
int[] array = Arrays.stream(sc.nextLine().split("\\s+")).mapToInt(Integer::parseInt).toArray();
movies.add(new Movie(array[0],array[1]));
}
// 按照结束时间 升序排序
movies.sort((m1,m2)->{
if(m1.getEndTime().equals(m2.getEndTime())){
return m1.getStartTime() - m2.getStartTime();
}
return m1.getEndTime() - m2.getEndTime();
});
solve(movies,m);
}
private static void solve(List<Movie> movies,int m) {
//720 120
//840 120
//0 60
//90 60
int count = 0;
int tempTime = 0;//记录上一场演出的结束时间+去下一场演出花费的时间
for (int i = 0; i < movies.size(); i++) {
Movie current = movies.get(i);
if(current.getStartTime() >= tempTime){//下一场演出开始时间>=tempTime,才能看演出
tempTime = current.getEndTime() + m;
count++;
}
}
System.out.println(count);
}
}
class Movie{
private Integer startTime;
private Integer endTime;
public Movie() {
}
public Integer getStartTime() {
return startTime;
}
public void setStartTime(Integer startTime) {
this.startTime = startTime;
}
public Integer getEndTime() {
return endTime;
}
public void setEndTime(Integer endTime) {
this.endTime = endTime;
}
public Movie(Integer startTime, Integer dual) {
this.startTime = startTime;
this.endTime = startTime + dual;
}
}