7188 2024. 01. 02 15:10:11 anon Szivárványszámok cpp17 Elfogadva 45/45 4ms 4332 KiB
#include <bits/stdc++.h>
#define FastIO ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL)
typedef long long ll;
using namespace std;
ll solve(string N, ll limit, bool left, unordered_map<string, ll> &dp) {
    ll i, ans;
    string key = N + " " + to_string(limit) + " " + (left ? "1" : "0");
    auto found = dp.find(key);
    if(found == dp.end()) {
        if(N.empty())
            ans = !left;
        else {
            ans = 0;
            if(left) {
                for(i = limit; i <= (N[0] - '0'); i++) {
                    string ns;
                    if(i == (N[0] - '0'))
                        ns = N.substr(1);
                    else
                        ns = string(N.size() - 1, '9');
                    ans += solve(ns, i, true, dp) + solve(ns, i - 1, false, dp);
                }
            }
            else {
                for(i = min(limit, (ll) (N[0] - '0')); i >= 0; i--) {
                    string ns;
                    if(i == (N[0] - '0'))
                        ns = N.substr(1);
                    else
                        ns = string(N.size() - 1, '9');
                    ans += solve(ns, i, false, dp);
                }
            }
        }
        dp[key] = ans;
    }
    else
        ans = found->second;
    return ans;
}
int main() {
    FastIO;
    ll i, ans;
    string N;
    unordered_map<string, ll> dp;
    cin >> N;
    if(N == "0") {
        cout << "0\n";
        return 0;
    }
    for(i = N.size() - 1; i >= 0; i--) {
        N[i]--;
        if(N[i] == '0' - 1)
            N[i] = '9';
        else
            break;
    }
    ans = solve(N, 1, true, dp);
    for(i = 0; i < N.size(); i++)
        ans += solve(string(i, '9'), 1, true, dp);
    cout << ans + 1 << '\n';
    return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 45/45
1 Elfogadva 0/0 3ms 1836 KiB
2 Elfogadva 0/0 3ms 2064 KiB
3 Elfogadva 0/0 4ms 2536 KiB
4 Elfogadva 1/1 3ms 2460 KiB
5 Elfogadva 1/1 3ms 2664 KiB
6 Elfogadva 1/1 3ms 2872 KiB
7 Elfogadva 1/1 3ms 3092 KiB
8 Elfogadva 1/1 3ms 3168 KiB
9 Elfogadva 1/1 3ms 3268 KiB
10 Elfogadva 1/1 3ms 3272 KiB
11 Elfogadva 1/1 3ms 3300 KiB
12 Elfogadva 1/1 3ms 3516 KiB
13 Elfogadva 2/2 3ms 3632 KiB
14 Elfogadva 2/2 3ms 3628 KiB
15 Elfogadva 2/2 3ms 3632 KiB
16 Elfogadva 2/2 3ms 3708 KiB
17 Elfogadva 1/1 3ms 3704 KiB
18 Elfogadva 2/2 4ms 3856 KiB
19 Elfogadva 2/2 4ms 3872 KiB
20 Elfogadva 2/2 4ms 3972 KiB
21 Elfogadva 3/3 4ms 4060 KiB
22 Elfogadva 2/2 3ms 3844 KiB
23 Elfogadva 2/2 3ms 4044 KiB
24 Elfogadva 2/2 3ms 4256 KiB
25 Elfogadva 2/2 4ms 4332 KiB
26 Elfogadva 2/2 4ms 4332 KiB
27 Elfogadva 2/2 4ms 4272 KiB
28 Elfogadva 2/2 4ms 4308 KiB
29 Elfogadva 2/2 4ms 4300 KiB
30 Elfogadva 2/2 4ms 4296 KiB