結果

問題 No.3408 1215 Segments
コンテスト
ユーザー GOTKAKO
提出日時 2025-12-15 00:25:44
言語 C++17
(gcc 13.3.0 + boost 1.89.0)
結果
TLE  
実行時間 -
コード長 2,373 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 1,856 ms
コンパイル使用メモリ 206,080 KB
実行使用メモリ 7,848 KB
最終ジャッジ日時 2025-12-15 00:25:52
合計ジャッジ時間 7,190 ms
ジャッジサーバーID
(参考情報)
judge4 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 25 TLE * 1 -- * 20
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

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

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    vector<vector<int>> V = {
        {4,5,6},
        {},
        {0,2,3,4,6},
        {0,2,3,5,6},
        {1,2,3,5},
        {0,1,3,5,6},
        {1,3,4,5,6},
        {0,2,5},
        {},
        {0,1,2,3,5}
    };

    vector<int> C(10),ap(7);
    auto f = [&]() -> bool {
        for(int nine=0; nine<=C.at(9); nine++){
            vector<int> memo = ap;
            ap.at(6) += nine;
            int c = ap.at(6);
        
            int more = c-ap.at(3);
            bool ok = true;
            if(more >= 0 && more <= C.at(0)){
                ap.at(3) += more;
                ap.at(0) += C.at(0)-more,ap.at(1) += C.at(0)-more,ap.at(2) += C.at(0)-more;
                more = c-ap.at(5);
                if(more >= 0 && more <= C.at(1)){
                    ap.at(2) += more,ap.at(5) += more;
                    ap.at(1) += C.at(1)-more,ap.at(4) += C.at(1)-more;
                    more = c-ap.at(0);
                    if(more >= 0 && more <= C.at(6)){
                        ap.at(0) += more;
                        more = c-ap.at(1);
                        if(more >= 0 && more <= C.at(7)){
                            ap.at(1) += more;
                        }
                        else ok = false;
                    }
                    else ok = false;
                }
                else ok = false;
            }
            else ok = false;

            if(ok) for(int i=0; i<6; i++) if(ap.at(i) != ap.at(i+1)){ok = false; break;}
            ap = memo;
            if(ok) return true;
        }
        return false; 
    };
    string s = "1"; cin >> s;
    for(auto c : s){
        C.at(c-'0')++;
        for(auto v : V.at(c-'0')) ap.at(v)++;
    }
    int n = s.size();
    while(f() == false){
        for(int i=n-1; ; i--){
            if(i < 0){
                s = '1'+s,n++;
                for(auto v : V.at(1)) ap.at(v)++;
                C.at(1)++; break;
            }
            char &c = s.at(i);
            for(auto v : V.at(c-'0')) ap.at(v)--;
            C.at(c-'0')--;
            if(c == '9') c = '0';
            else c++;
            for(auto v : V.at(c-'0')) ap.at(v)++;
            C.at(c-'0')++;
            if(c == '0') continue;
            break;
        }
    }
    cout << s << endl;
}
0