列表

详情


NC221825. ranko的手表

描述

ranko 的手表坏了,正常应该显示 xx:xx 的形式(4 个数字),比如下午 1 点半应该显示 13:30 ,但现在经常会有一些数字有概率无法显示。
ranko 在  时刻看了下时间,过了一段时间在 时刻看了下时间。她想知道, 这两个时刻之间相距的时间的最大值和最小值是多少?
保证 之前(且 不等)。t_2在同一天的 00:00 到 23:59 之间。

输入描述

两行输入两个时间,为 xx:xx 的形式。其中  为数字或者字符 '?' ,问号代表这个数字没有显示。
保证输入是合法的。

输出描述

一行输出两个整数,分别代表  相距时间的最小值和最大值(单位分钟)。

示例1

输入:

18:0?
2?:1?

输出:

121 319

说明:

相距最小的时间为 18:09 到 20:10 ,相距121分钟。
相距最大的时间为 18:00 到 23:19 ,相距319分钟。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++ 11.0.1) 解法, 执行用时: 8ms, 内存消耗: 412K, 提交时间: 2023-02-09 15:55:52

#include<bits/stdc++.h>
using namespace std;

bool check(int i,string &s)
{
    if(s[0]!='?'&& i/60/10!=s[0]-'0') return false;
    if(s[1]!='?'&& i/60%10!=s[1]-'0') return false;
    if(s[3]!='?'&& i%60/10!=s[3]-'0') return false;
    if(s[4]!='?'&& i%60%10!=s[4]-'0') return false;
    return true;
}

int main()
{
    string s1,s2;
    cin>>s1>>s2;
    int maxi=0x3f3f3f3f,mini=0;
    for(int i=0;i<24*60;++i)
        for(int j=i+1;j<24*60;++j)
            if(check(i,s1)&&check(j,s2))
                maxi=min(maxi,j-i),mini=max(mini,j-i);
    cout<<maxi<<' '<<mini;
}
    

pypy3 解法, 执行用时: 237ms, 内存消耗: 57664K, 提交时间: 2022-09-25 19:37:57

h1,m1 = input().split(':')
h2,m2 = input().split(':')
 
def m_time(h='',m=''):
    t_list = []
    for i in range(24*60):
        hours = '%02d'%(i/60)
        minutes = '%02d'%(i%60)
        if all(h[j]==hours[j] or h[j]=='?' for j in range(2)) and all(m[j]==minutes[j] or m[j]=='?' for j in range(2)):
            t_list.append(i)
    return t_list
     
t1 = set(m_time(h1,m1))
t2 = set(m_time(h2,m2)) 
t = []
for i in t1:
    for j in t2:
        if j>i:
            t.append(j-i)
 
print(min(t),max(t))

Python3 解法, 执行用时: 396ms, 内存消耗: 35424K, 提交时间: 2022-08-02 18:04:37

h1,m1=input().split(':')
h2,m2=input().split(':')

def m_time(h='',m=''):
    t_list=[]
    for i in range(24*60):
        hours='%02d'%(i/60)
        minutes='%02d'%(i%60)
        if all(h[j]==hours[j] or h[j]=='?'for j in range(2)) and all(m[j]==minutes[j] or m[j]=='?'for j in range(2)):
            t_list.append(i)
    return t_list

t1=set(m_time(h1,m1))
t2=set(m_time(h2,m2))
t=[]
for i in t1:
    for j in t2:
        if j>i:
            t.append(j-i)

print(min(t),max(t))

上一题