5910 2023. 10. 05 15:08:03 TuruTamas Szivárványszámok cpp17 Elfogadva 45/45 6ms 4792 KiB
#include "bits/stdc++.h"
#include <algorithm>
#include <cassert>
#include <climits>
#include <cstddef>
#include <ostream>
#include <regex>
#include <set>
#include <string>
#include <type_traits>
#include <vector>
using namespace std;

#define ll unsigned long long

string s;
ll r = 0;
int init_size;
int cur_size;
int ind = -1;
string cur;
vector<vector<vector<ll>>> cache;

void recurse(bool past_mid, bool any, int lastval) {
    ind++;
    // if (ind != 0) cur.push_back(lastval + '0');
    if (ind == cur_size) {
        r += any;
        ind--;
        // cout << cur << " " << cur.size() << endl;
        // cur.pop_back();
        return;
    }
    ll& val = cache[past_mid + 2*any][lastval][ind];
    if (val != -1) {
        r += val;
        ind--;
        // cur.pop_back();
        return;
    }
    ll old_val = r;
    int mini = ind == 0, maxi;
    int c = s[ind] - '0';
    if (!past_mid && !any) {
        maxi = c;
    }
    else if (!past_mid && any) {
        maxi = 9;
    }
    else if (past_mid && !any) {
        maxi = min(c, lastval);
    }
    else if (past_mid && any) {
        maxi = lastval;
    }
    for (int i = mini; i <= maxi; i++) {
        bool pm = past_mid || i < lastval;
        bool a = any || i < c;
        recurse(pm, a, i);
    }
    // if (ind != 0) cur.pop_back();
    val = r-old_val;
    ind--;
}

int main() {
    cin >> s;
    cur_size = init_size = s.size();
    cache.assign(4, vector<vector<ll>>(10, vector<ll>(cur_size, -1)));
    recurse(false, false, 0);
    while (--cur_size) {
        cache.assign(4, vector<vector<ll>>(10, vector<ll>(cur_size, -1)));
        recurse(false, true, 0);
    }
    cout << r + 1 << endl;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 45/45
1 Elfogadva 0/0 3ms 1812 KiB
2 Elfogadva 0/0 3ms 2060 KiB
3 Elfogadva 0/0 4ms 2284 KiB
4 Elfogadva 1/1 3ms 2316 KiB
5 Elfogadva 1/1 3ms 2528 KiB
6 Elfogadva 1/1 3ms 2924 KiB
7 Elfogadva 1/1 2ms 2980 KiB
8 Elfogadva 1/1 2ms 2980 KiB
9 Elfogadva 1/1 3ms 3168 KiB
10 Elfogadva 1/1 3ms 3472 KiB
11 Elfogadva 1/1 2ms 3280 KiB
12 Elfogadva 1/1 3ms 3472 KiB
13 Elfogadva 2/2 3ms 3604 KiB
14 Elfogadva 2/2 2ms 3688 KiB
15 Elfogadva 2/2 3ms 3800 KiB
16 Elfogadva 2/2 3ms 3988 KiB
17 Elfogadva 1/1 3ms 4124 KiB
18 Elfogadva 2/2 4ms 4268 KiB
19 Elfogadva 2/2 4ms 4492 KiB
20 Elfogadva 2/2 4ms 4792 KiB
21 Elfogadva 3/3 6ms 4732 KiB
22 Elfogadva 2/2 3ms 4640 KiB
23 Elfogadva 2/2 3ms 4732 KiB
24 Elfogadva 2/2 3ms 4664 KiB
25 Elfogadva 2/2 4ms 4740 KiB
26 Elfogadva 2/2 4ms 4768 KiB
27 Elfogadva 2/2 6ms 4780 KiB
28 Elfogadva 2/2 6ms 4756 KiB
29 Elfogadva 2/2 6ms 4764 KiB
30 Elfogadva 2/2 6ms 4736 KiB