题目描述:
警察在侦破一个案件时,得到了线人给出的可能犯罪时间,形如 “HH:MM” 表示的时刻。
根据警察和线人的约定,为了隐蔽,该时间是修改过的,解密规则为:利用当前出现过的数字,构造下一个距离当前时间最近的时刻,则该时间为可能的犯罪时间。每个出现数字都可以被无限次使用。
输入描述:
形如HH:SS的字符串,表示原始输入
输出描述:
形如HH:SS的字符串,表示推理出来的犯罪时间
示例1输入输出示例仅供调试,后台判题数据一般不包含示例
输入
18:52
输出
18:55
说明
利用数字1, 8, 5, 2构造出来的最近时刻是18:55,是3分钟之后。结果不是18:51因为这个时刻是23小时59分钟之后。
示例2输入输出示例仅供调试,后台判题数据一般不包含示例
输入
23:59
输出
22:22
说明
利用数字2, 3, 5, 9构造出来的最近时刻是22:22。 答案一定是第二天的某一时刻,所以选择可构造的最小时刻为犯罪时间。
备注:
1. 可以保证线人给定的字符串一定是合法的。例如,“01:35” 和 “11:08” 是合法的,“1:35” 和 “11:8” 是不合法的。
2. 最近的时刻有可能在第二天。
668
+---+
3 | | ++ + +---|
| | | 3 + 6 + | + | +
| + | | + + + | + | +
| + | +---+ + + +++++ + | + | +
| + | + | + +----+ | | + | + | +
| + 3 | + | + + + 2 | | 2 + | + | +
| + | + | + + + | | + | + | +
| +---+ | | | | + ----+ | +---+ | | + | +
| | | | | | + | | | | | | + | +
| 1 | | | 8 | | + 1 | | | 1 | | 1 | | + | +
| | | | | | + | | | | | | | + | +
| +---+ | +---+ | ++---+ ++ +---+ +---+ | + | +
| | | | | | ++ | | |+ | +
|0 | | | 0 | 0 | ++ | 0 | |+ | +
| | | | | | ++ | | |+ | +
+---+ + +-------+ +---+| +|+ | +
+ + | +
0 1 2 3 4 5 6 7 8 9 10 11 12 + v: w u m u 1 0 2 4
题目描述:
需要注意的是,推导出最近的时间,可以是当天最近或者隔一天最近,就看哪个时间更近
代码实现:
def get_sum(value):
return '0' + value if len(value) != 2 else value
def process(times):
data_list = [int(j) for i in times.split(":") for j in i]
hrs, mins = [i for i in times.split(':')]
time_sall = [(i * 10 + j) for i in data_list for j in data_list if i <= 5]
time_sall.sort()
time_sall = [get_sum(str(i)) for i in time_sall]
temp = [hrs + ':' + i for i in time_sall if int(i) > int(mins)]
if len(temp) != 0:
return ''.join(temp[0])
if int(hrs) != 23:
for i in range(len(time_sall)):
if int(time_sall[i]) > int(hrs):
return time_sall[i] + ':' + time_sall[0]
return time_sall[0] + ":" + time_sall[0]
print(process(input()))