题目描述
牛牛总是睡过头,所以他定了很多闹钟,只有在闹钟响的时候他才会醒过来并且决定起不起床。从他起床算起他需要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)分。
数据保证至少有一个闹钟可以让牛牛及时到达教室。
输出描述:
输出两个整数表示牛牛最晚起床时间。
放代码:
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin=new Scanner (System.in);
int n=cin.nextInt();//闹钟数量
int a[][]=new int[n][2];
for(int i=0;i<n;i++) {
a[i][0]=cin.nextInt();//当天的A时B分中的A
a[i][1]=cin.nextInt();//当天的A时B分中的B
}
int c[][]=new int[1][2];
int x=cin.nextInt();//去教室需要用到的时间
int b[][]=new int [1][2];//上课时间A时B分
b[0][0]=cin.nextInt();
b[0][1]=cin.nextInt();
if(x<b[0][1]) {
c[0][0]=b[0][0];
c[0][1]=b[0][1]-x;
}
else if(x==b[0][1]) {
c[0][0]=b[0][0];
c[0][1]=0;
}
else {
if(x-b[0][1]<=60) {
c[0][0]=b[0][0]-1;
c[0][1]=60-(x-b[0][1]);
}
else {
c[0][0]=b[0][0]-2;
c[0][1]=60-(x-b[0][1]-60);
}
}
for (int i = 1; i < n; i++) {
int temp0 = a[i][0];// 待插入的值
int temp1 = a[i][1];// 待插入的值
int index = i;// 待插入的位置
while ((index > 0 && a[index - 1][0] > temp0) || (index > 0 && (a[index - 1][0] == temp0 && index > 0 && a[index - 1][1] > temp1) )) {
a[index][1] = a[index - 1][1];// 待插入的位置重新赋更大的值
a[index][0] = a[index - 1][0];
index--;// 位置往前移
}
a[index][1] = temp1;
a[index][0] = temp0;
}
int temp[][]=new int[1][2];
for(int i=0;i<n;i++) {
if(c[0][0]<a[i][0] || (c[0][0]==a[i][0] && c[0][1]<a[i][1]))break;
temp[0][0]=a[i][0];
temp[0][1]=a[i][1];
}
/*
*
for(int i=0;i<n;i++) {
System.out.println(a[i][0]+" "+a[i][1]);
}
System.out.println();
System.out.println(c[0][0]+" "+c[0][1]);
*/
System.out.print(temp[0][0]+" "+temp[0][1]);
}
}