首页 > 试题广场 >

牛牛的闹钟

[编程题]牛牛的闹钟
  • 热度指数:32198 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
牛牛总是睡过头,所以他定了很多闹钟,只有在闹钟响的时候他才会醒过来并且决定起不起床。从他起床算起他需要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
N = eval(input())
#Hi=[]建立数组的话后面要用append
Hi = [0 for x in range(0,N)]
Mi = [0 for x in range(0,N)]
for i in range(N):
    Hi[i],Mi[i] = (input().split( ))
    Hi[i] = eval(Hi[i])
    Mi[i] = eval(Mi[i])
X = eval(input())
A,B = (input().split())
A = eval(A)
B = eval(B)
i = N-1
P = []
Q = []
while(i >= 0):
    H = Hi[i] + (Mi[i]+X)//60
    M = (Mi[i]+X)%60
    if H < A:
        P.append(Hi[i])
        Q.append(Mi[i])
    elif H == A:
        if M <= B:
            P.append(Hi[i])
            Q.append(Mi[i])
    i-=1
H = max(P)
M_ = []
id = [j for j, p in enumerate(P) if p==H]
for element in enumerate(id):
    M_.append(Q[element[1]]) #Q[element]是tuple类型,第一个数为索引,第二个数为对应的元素值
M = max(M_)
print(str(H)+" "+str(M))


编辑于 2021-07-02 15:18:39 回复(0)
while True:
    try:
        n = int(input())
        clock_time_list = []
        for i in range(n):
            h, m = map(int, input().split())
            num = h * 60 + m
            clock_time_list.append(num)
        clock_time_list.sort()
        time_need = int(input())
        h_class, m_class = map(int, input().split())
        time_class = h_class * 60 + m_class
        time_get_up = time_class - time_need
        for i in range(len(clock_time_list)):
            if clock_time_list[i] > time_get_up:
                print(clock_time_list[i-1] // 60, clock_time_list[i-1] % 60)
                break
    except:
        break

发表于 2019-08-23 22:06:29 回复(0)
import sys
def plus_time(t,x):
    if t[1]+x<60:
        return [t[0],t[1]+x]
    else:
        return [t[0]+1,t[1]+x-60]
    
if __name__=='__main__':
    n=int(sys.stdin.readline().strip())
    time=[]
    for i in range(n):
        time.append(list(map(int,sys.stdin.readline().split())))
    x=int(sys.stdin.readline().strip())
    start=list(map(int,sys.stdin.readline().split()))
    time=sorted(time,key=lambda x:x[::1])
    i=0
    while i<len(time):
        if plus_time(time[i],x)[0]<start[0]:
            i+=1
        elif plus_time(time[i],x)[0]==start[0] and plus_time(time[i],x)[1]<=start[1]:
            i+=1
        else:
            print(' '.join(map(str,time[i-1])))
            break
    

发表于 2019-08-21 11:29:53 回复(0)
"""
闹钟转为分钟为单位的数组,并排序
求得最晚起床时间在数组中的插入位置,前一项即为最晚起床闹钟
格式转化为所求
"""
import bisect
import sys

if __name__ == "__main__":
    # sys.stdin = open('input.txt', 'r')
    n = int(input().strip())
    clock = []
    for i in range(n):
        h, m = list(map(int, input().strip().split()))
        clock.append(h * 60 + m)
    x = int(input().strip())
    a, b = list(map(int, input().strip().split()))
    y = a * 60 + b - x
    clock.sort()
    t = bisect.bisect(clock, y) - 1
    print(clock[t] // 60, clock[t] % 60)

编辑于 2019-07-02 20:29:49 回复(0)
先把闹钟/上课的时间转为分钟,对闹钟的时间排序,闹钟+路程>上课,则跳出循环,输出该闹钟的时间
n = int(input())
clocks = [0] * n
for i in range(n):
    clocks[i] = input().split()
    clocks[i] = int(clocks[i][0]) * 60 + int(clocks[i][1])
clocks.sort()
X = int(input())
classtime = input().split()
classtime = int(classtime[0]) * 60 + int(classtime[1])

lastcall = 0
for i in range(n):
    if clocks[i] + X <= classtime:
        lastcall = clocks[i]
    else:
        break
lastclock = [0, 0]
lastclock[1] = lastcall % 60
lastclock[0] = (lastcall - lastclock[1]) // 60
print(' '.join(str(time) for time in lastclock))

发表于 2018-04-10 06:14:31 回复(0)

热门推荐

通过挑战的用户

查看代码