用Java解决牛客网WY51牛牛的闹钟问题

103 篇文章 1 订阅
89 篇文章 0 订阅

题目描述

牛牛总是睡过头,所以他定了很多闹钟,只有在闹钟响的时候他才会醒过来并且决定起不起床。从他起床算起他需要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]);
		
	}

}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值