NC221825. ranko的手表
描述
输入描述
两行输入两个时间,为 xx:xx 的形式。其中 为数字或者字符 '?' ,问号代表这个数字没有显示。
保证输入是合法的。
输出描述
一行输出两个整数,分别代表 和 相距时间的最小值和最大值(单位分钟)。
示例1
输入:
18:0? 2?:1?
输出:
121 319
说明:
相距最小的时间为 18:09 到 20:10 ,相距121分钟。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))