結果

問題 No.3157 Nabeatsu
ユーザー Salt
提出日時 2025-05-23 19:48:47
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 1,746 bytes
コンパイル時間 3,425 ms
コンパイル使用メモリ 274,948 KB
実行使用メモリ 7,844 KB
最終ジャッジ日時 2025-05-23 19:48:55
合計ジャッジ時間 6,265 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 42 WA * 3
権限があれば一括ダウンロードができます

ソースコード

diff #

#ifndef ONLINE_JUDGE
#define _GLIBCXX_DEBUG
#endif

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
//https://boostjp.github.io/tips/multiprec-int.html

#define YES cout<<"Yes"<<endl
#define NO cout<<"No"<<endl
#define YN {cout<<"Yes"<<endl;}else{cout<<"No"<<endl;}// if(a==b)YN;
#define NO2 cout<<-1<<endl

#define rep(i, n) for (int i = 0; i < (int)(n); ++i)
#define rrep(i, n) for (int i=int(n)-1; i>=0; --i)
#define all(a) a.begin(),a.end()
#define rall(a) a.rbegin(),a.rend()

void NO3(string &S, ll &sum) {
    int len = S.size();
    rep(i, len) {
        if (S[i] - '0' == 3) {
            sum--;
            S[i] = '2';
            for (int j=i+1; j<len; j++) {
                sum += '9' - S[j];
                S[j] = '9';
            }
            break;
        }
    }
}

void minus1(string &S, ll &sum) {
    cerr << S << ' ';
    int l = S.size();
    if (S[l-1] != '0') {
        char c = S[l-1]-1;
        S[l-1] = c;
        sum--;
    }
    else {
        for (int i=l-2; i>=0; i--) {
            if (S[i] != '0') {
                sum--;
                char c = S[i]-1;
                S[i] = c;
                for (int j=i+1; j<l; j++) {
                    sum += '9' - S[j];
                    S[j] = '9';
                }
                break;
            }
            if (S[i] == '3') {
                NO3(S, sum);
            }
        }
    }
    cerr << S << endl;
}

int main() {
    string S;
    cin >> S;
    int len = S.size();
    ll sum = 0;
    NO3(S, sum);

    sum = 0;
    rep(i, len) {
        sum += S[i] - '0';
    }

    if (sum%3 != 0) {
        cout << S << endl;
        return 0;
    }

    while (sum%3 == 0) {
        minus1(S, sum);
    }

    cout << S << endl;
    
}
0