史题,不知道谁把它当成简单题的,实现特别麻烦。直接暴力找出所有可能时间,然后直接统计即可。
#include<bits/stdc++.h> using i64 = long long; int main() { std::cin.tie(nullptr)->sync_with_stdio(false); std::string s, t; std::cin >> s >> t; std::set<int> ss, st; auto INSERT = [&](std::string& s, std::set<int>& SET) { std::string m = "??:??"; for (int i = 0; i < 24; i++) { for (int j = 0; j < 60; j++) { m[0] = (i / 10) + '0'; m[1] = (i % 10) + '0'; m[3] = (j / 10) + '0'; m[4] = (j % 10) + '0'; bool ok = 1; for (int k = 0; k < 5; k++) { if (s[k] != '?' && s[k] != m[k]) { ok = 0; break; } } if (ok) { SET.insert(i * 60 + j); } } } }; INSERT(s, ss); INSERT(t, st); int mi = 1e9, mx = 1; for (auto i : ss) { auto it = st.upper_bound(i); if (it != st.end()) { mi = std::min(mi, *it - i); } } std::cout << mi << " "; std::cout << *st.rbegin() - *ss.begin(); return 0; }