熱門文章

2026年3月31日 星期二

ZeroJudge 解題筆記:d048. 11309 - Counting Chaos

作者:王一哲
日期:2026年3月31日


ZeroJudge 題目連結:d048. 11309 - Counting Chaos

解題想法


寫一個自訂函式 check,檢查輸入的時間 h:m 是否為迴文。再寫另一個自訂函式 solve,輸入讀取的到字串 s,用 : 分割為 h:m,再換算成分鐘,由於答案範圍很小,用線性搜尋從目前的時間 curr 開始找答案即可。

Python 程式碼


使用時間約為 33 ms,記憶體約為 2.9 MB,通過測試。
def check(h, m):  # 檢查 h:m 是否為迴文
    time = f"{h:02d}{m:02d}"  # 補 0 組成字串
    time = time.lstrip('0')  # 刪除前置 0
    return time == time[::-1]  # 是否為迴文

def solve(s):  # 輸入字串求解
    h, m = map(int, s.split(':'))  # 用 : 分割字串轉成整數
    curr = h*60 + m  # 現在的時刻,以分鐘為單位
    for _ in range(1, 1440):  # 線性搜尋找答案
        curr += 1  # 時間加 1 分鐘
        curr_h = curr//60%24  # 時
        curr_m = curr%60  # 分
        if check(curr_h, curr_m):  # 如果是迴文,回傳答案
            return f"{curr_h:02d}:{curr_m:02d}"
    return "00:00"  # 預設的回傳值,理論上用不到

n = int(input())
for _ in range(n):
    print(solve(input()))


C++ 程式碼


使用時間約為 2 ms,記憶體約為 324 kB,通過測試。
#include <iostream>
#include <string>
using namespace std;

bool check(int h, int m) {
    if (h == 0 && m == 0) return true;
    string time = "";
    if (h > 0) time += to_string(h);
    if (m < 10) {
        if (time.empty()) time += to_string(m);
        else time += "0" + to_string(m);
    } else {
        time += to_string(m);
    }
    int n = (int)time.size();
    for(int i=0; i<n/2; i++) {
        if (time[i] != time[n-i-1]) return false;
    }
    return true;
}

string solve(string s) {
    int curr = stoi(s.substr(0, 2))*60 + stoi(s.substr(3));
    string ans = "";
    for(int i=0; i<1440; i++) {
        curr++;
        int h = curr/60%24, m = curr%60;
        if (check(h, m)) {
            if (h < 10) ans += "0" + to_string(h) + ":";
            else ans += to_string(h) + ":";
            if (m < 10) ans += "0" + to_string(m);
            else ans += to_string(m);
            return ans;
        }
    }
    return "00:00";
}

int main() {
    ios::sync_with_stdio(0); cin.tie(0);
    int T; cin >> T;
    string line;
    for(int t=0; t<T; t++) {
        cin >> line;
        cout << solve(line) << "\n";
    }
    return 0;
}


沒有留言:

張貼留言