結果

問題 No.3658 Darumaka Number 2
コンテスト
ユーザー fuji
提出日時 2026-08-30 15:26:31
言語 C++23(gcc16)
(gcc 16.1.0 + boost 1.92.0)
コンパイル:
g++-16 -O2 -lm -std=c++23 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
WA  
実行時間 -
コード長 1,178 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 2,853 ms
コンパイル使用メモリ 361,092 KB
実行使用メモリ 1,306,624 KB
最終ジャッジ日時 2026-08-30 15:26:45
合計ジャッジ時間 6,394 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge2_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 4 WA * 11 MLE * 2 -- * 28
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

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

int main() {
    string s; cin >> s;
    ll N = (ll)s.size();
    vector<vector<string>> dp(N+1, vector<string>(2));

    //初期設定
    dp[0][0] = "";
    dp[0][1] = "";
    ll d = s[0] - '0';
    if (0 <= d && d < 4) {
        dp[0][0] = "-";
    } else if (d == 4) {
        dp[0][0] = "4";
    } else if (d == 5) {
        dp[0][0] = "5";
        dp[0][1] = "4";
    } else {
        dp[0][1] = "5";
    }

    for (ll i = 1; i < N; i++) {
        ll i_digit = s[i] - '0';
        
        dp[i][1] = dp[i-1][1] + "5"; //未満フラグ1のとき

        if (dp[i-1][0] == "-") {
            dp[i][0] = "-";
            continue;
        }

        if (0 <= i_digit && i_digit < 4) {
            dp[i][0] = "-";
        } else if (i_digit == 4) {
            dp[i][0] = dp[i-1][0] + "4";
        } else if (i_digit == 5) {
            dp[i][0] = dp[i-1][0] + "5";
            dp[i][1] = dp[i-1][0] + "4";
        } else {
            dp[i][1] = dp[i-1][0] + "5";
        }
    }
    if (dp[N-1][0] == "-") {
        cout << dp[N-1][1] << endl;
    } else {
        cout << dp[N-1][0] << endl;
    }
}
0