每个输入包含一个测试用例。
每个测试用例的第一行包含一个正整数,表示闹钟的数量N(N<=100)。
接下来的N行每行包含两个整数,表示这个闹钟响起的时间为Hi(0<=A<24)时Mi(0<=B<60)分。
接下来的一行包含一个整数,表示从起床算起他需要X(0<=X<=100)分钟到达教室。
接下来的一行包含两个整数,表示上课时间为A(0<=A<24)时B(0<=B<60)分。
数据保证至少有一个闹钟可以让牛牛及时到达教室。
输出两个整数表示牛牛最晚起床时间。
3 5 0 6 0 7 0 59 6 59
6 0
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; class Node{ int x=0; int y=0; Node(int x,int y){ this.x=x; this.y=y; } Node(){} } public class Main { public static void main(String[] args) throws IOException { BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); int n=Integer.parseInt(br.readLine()); ArrayList<Node> list=new ArrayList<>(); for(int i=0;i<n;i++) { String[] time=br.readLine().split(" "); Node node=new Node(Integer.parseInt(time[0]),Integer.parseInt(time[1])); list.add(node); } //起床到学校的时间 int minutes=Integer.parseInt(br.readLine()); String[] times=br.readLine().split(" "); int hour=Integer.parseInt(times[0]); int minute=Integer.parseInt(times[1]); //保存结果 Node res=new Node(); int min=Integer.MAX_VALUE; for(int i=0;i<n;i++) { Node node=list.get(i); if(hour<node.x||(hour==node.x&&minute<node.y)) continue; else if(hour>=node.x&&minute>=node.y) { int sum=(hour-node.x)*60+minute-node.y; if(sum>=minutes&&sum<=min) { res=node; min=sum; } } else if(hour>=node.x&&minute<=node.y) { int sum=((hour-node.x-1)*60)+(60+minute-node.y); if(sum>=minutes&&sum<=min) { res=node; min=sum; } } } System.out.println(String.format("%d %d",res.x,res.y)); } }
import java.util.Arrays; import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); //输入闹钟个数 int n = sc.nextInt(); int[] clock = new int[n]; //输入闹钟时间 for (int i = 0; i < n; i++) { int hour = sc.nextInt(); int minute = sc.nextInt(); clock[i] = hour*60 + minute; } Arrays.sort(clock); int walkTime = Integer.parseInt(sc.next()); int hour = sc.nextInt(); int minute = sc.nextInt(); int classTime = hour*60+minute; int getupTime = classTime-walkTime; int i = n-1; //如果闹钟大于起床时间,继续往下找到最晚起床时间 while (getupTime < clock[i]){ i--; } System.out.println(clock[i]/60+" "+clock[i]%60); } }
import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); int N=sc.nextInt(); int[] arr=new int[N]; for(int i=0;i<N;i++){ int Hi=sc.nextInt(); int Mi=sc.nextInt(); arr[i]=Hi*60+Mi; } Arrays.sort(arr); int X=sc.nextInt(); int A=sc.nextInt(); int B=sc.nextInt(); int sk=A*60+B; for(int i=0;i<N;i++){ int t=sk-X-arr[i]; if(t==0){ System.out.print(arr[i]/60+" "+arr[i]%60); break; } if(t<0){ System.out.print(arr[i-1]/60+" "+arr[i-1]%60); break; } } } }
import java.util.*; //1.将输入的闹钟时间转换成分钟数存入矩阵,方便计算 //2.将上课时间减去到达教室所需时间,得到起床时间 //3.由于只有闹钟响时才决定起不起床,因此在小于等于起床时间的所有闹钟里面,最大的那个就是我们需要的最晚闹钟时间 public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int N = sc.nextInt(); //时间转换成分钟数 int[] minutes = new int[N]; int hour = 0; int minute = 0; for(int i = 0; i < N; i++){ hour = sc.nextInt(); minute = sc.nextInt(); minutes[i] = hour * 60 + minute; } int needTime = sc.nextInt(); hour = sc.nextInt(); minute = sc.nextInt(); int classTime = hour * 60 + minute; //得到最晚起床时间 int lastMinute = classTime - needTime; //设置一个max,在小于等于起床时间的闹钟时间里,更新最大的闹钟时间为max int max = 0; for(int i = 0; i < N; i++){ if(lastMinute >= minutes[i]){ max = Math.max(max, minutes[i]); } } //转换成时间 hour = max / 60; minute = max % 60; System.out.print(hour + " " + minute); } }
import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(sc.hasNext()) { int n = sc.nextInt(); ArrayList<Integer> array = new ArrayList<Integer>(); for(int i = 0;i<n;i++) { int p = sc.nextInt(); int q = sc.nextInt(); array.add(p*60+q); } int need = sc.nextInt(); int hour = sc.nextInt(); int second = sc.nextInt(); int overTime = hour*60 + second; int num = 0; int abs = overTime; for(int i =0;i<n;i++) { if((array.get(i)+need)<=overTime) { if(overTime-(array.get(i)+need)<=abs) { abs = overTime-(array.get(i)+need); num = i; } } } System.out.println(array.get(num)/60 + " "+array.get(num)%60); } } }
import java.util.*;
public class Main {
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int N=sc.nextInt();
int[][] array =new int [N][2];
for (int i = 0; i <N; i++)
{
array[i][0]=sc.nextInt();
array[i][1]=sc.nextInt();
} int x=sc.nextInt(); int A=sc.nextInt(); int B=sc.nextInt(); A=(int) ((A+Math.floor((B-x)/60.0)+24)%24); B=(B-x+120)%60; int hour=0; int minute=0; for (int i = 0; i < N; i++) if(array[i][0]<A||array[i][0]==A&&array[i][1]<=B) { if(hour<array[i][0]) { hour=array[i][0]; minute=array[i][1]; } else if (hour==array[i][0]&&minute<array[i][1]) { hour=array[i][0]; minute=array[i][1]; } } System.out.println(hour+" "+minute); }
}
import java.util.Arrays; import java.util.Comparator; import java.util.Scanner; public class Main { static class Time { private int hour; private int min; public Time(int hour, int min) { this.hour = hour; this.min = min; } } public static class TimeComparator implements Comparator<Time> { public int compare(Time o1, Time o2) { return o1.hour != o2.hour ? o2.hour - o1.hour : o2.min - o1.min; } } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); Time[] time = new Time[n]; for (int i = 0; i < n; i++) { time[i] = new Time(sc.nextInt(), sc.nextInt()); } int need = sc.nextInt(); Time classTime = new Time(sc.nextInt(), sc.nextInt()); while (need > 0) { if (need >= 60) { need -= 60; classTime.hour--; } else { if (classTime.min - need < 0) { classTime.min = 60 - (need - classTime.min); classTime.hour--; } else { classTime.min -= need; } break; } } Arrays.sort(time, new TimeComparator()); for (int i = 0; i < n; i++) { if (classTime.hour > time[i].hour || (classTime.hour == time[i].hour && classTime.min >= time[i].min)) { System.out.println(time[i].hour + " " + time[i].min); break; } } } }
import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); List<Integer> min = new ArrayList<>(); int N = sc.nextInt(); for(int i=0;i<N;i++){ int H = sc.nextInt(); int M = sc.nextInt(); min.add(H*60+M); } int X = sc.nextInt(); int time = sc.nextInt()*60+sc.nextInt(); lastClock(min,X,time); } public static void lastClock(List<Integer> clock,int X,int time){ int last = time - X; clock.sort(new Comparator<Object>(){ @Override public int compare(Object o1, Object o2) { // TODO 自动生成的方法存根 return (Integer)o1 - (Integer)o2; } }); for(int i=1;i<clock.size();i++){ if(clock.get(i)>last){ System.out.println(clock.get(i-1)/60 + " "+clock.get(i-1)%60); break; } } } }
把时间都转换为分钟计数,上课时间-路上时间得到最晚起床时间,把所有闹钟时间排序后,二分查找最晚起床时间。
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int h=0,m=0;
int[] a = new int[n];
for(int i=0;i<n;i++){
h = sc.nextInt();
m = sc.nextInt();
a[i] = h*60+m;
}
int t = sc.nextInt();
h = sc.nextInt();
m = sc.nextInt();
int p = h*60+m-t;
Arrays.sort(a);
t = Arrays.binarySearch(a,p);
if(t <0) t = -(t+2);
h = a[t]/60;
m = a[t]%60;
System.out.print(h+" "+m);
}
}