题目描述
牛牛总是睡过头,所以他定了很多闹钟,只有在闹钟响的时候他才会醒过来并且决定起不起床。从他起床算起他需
要X分钟到达教室,上课时间为当天的A时B分,请问他最晚可以什么时间起床
输入描述:
每个输入包含一个测试用例。
每个测试用例的第一行包含一个正整数,表示闹钟的数量N(N<=100)。
接下来的N行每行包含两个整数,表示这个闹钟响起的时间为Hi(0<=A<24)时Mi(0<=B<60)分。
接下来的一行包含一个整数,表示从起床算起他需要X(0<=X<=100)分钟到达教室。
接下来的一行包含两个整数,表示上课时间为A(0<=A<24)时B(0<=B<60)分。
数据保证至少有一个闹钟可以让牛牛及时到达教室。
输出描述:
输出两个整数表示牛牛最晚起床时间。
示例1
输入:
3
5 0
6 0
7 0
59
6 59
输出:
6 0
解题思路:
最晚时间即最大有关,可以用排序。
import java.time.Clock;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Scanner;
public class Main {
public static class Clock implements Comparable{
int Hi,Mi;
public Clock(int h,int m) {
Hi = h;
Mi = m;
}
public void before(int min) {
if (this.Mi<min) {
this.Hi -=1;
this.Mi +=60;
if (this.Mi<min) {
this.Hi -=1;
this.Mi +=60;
}
}
this.Mi = this.Mi -min;
}
@Override
public int compareTo(Object o) {
// TODO Auto-generated method stub
Clock tem = ((Clock)o);
int h = tem.Hi;
int m = tem.Mi;
if (this.Hi < h) {
return -1;
}
else if (this.Hi>h) {
return 1;
}
else if (this.Hi == h) {
if (this.Mi < m) {
return -1;
}
else if(this.Mi ==m) {
return 0;
}
else return 1;
}
return 0;
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
Clock[] list = new Clock[N];
for (int i=0;i<N;++i) {
int h =in.nextInt();
int m = in.nextInt();
list[i] = new Clock(h, m);
}
Arrays.sort(list);
int min = in.nextInt();
int h1 = in.nextInt();
int m1 = in.nextInt();
Clock time = new Clock(h1, m1);
time.before(min);
int idx =N;
for (int i=N-1;i>=0;--i) {
int ans =time.compareTo(list[i]);
if (ans==1 || ans==0) {
idx = i;
break;
}
}
String s =list[idx].Hi+" "+list[idx].Mi;
System.out.println(s);
}
}