56922023-09-08 20:36:03TuruTamasSzivárványszámokcpp17Hibás válasz 13/454ms4976 KiB
//
// Created by tamas on 9/8/23.
//

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

string s;
int r = 0;

struct vmi {
    bool found_max;
    int val;
    int index;
    bool thing;
    bool operator<(const vmi& a) const {
        if (found_max != a.found_max)
            return found_max < a.found_max;
        if (val != a.val)
            return val < a.val;
        if (index != a.index)
            return index < a.index;
        if (thing != a.thing)
            return thing < a.thing;
        return false;
    }
};

map<vmi, int> cache;

void f(vmi& dolog) {
    if (cache.count(dolog)) {
        r += cache[dolog];
        return;
    }
    bool found_max  = dolog.found_max;
    int  val        = dolog.val;
    int  index      = dolog.index;
    bool thing      = dolog.thing;
    if (index == s.size()) {
        r++;
        return;
    }
    int num = s[index] - '0';
    int old_r = r;
    if (found_max) {
        int m  = thing ? val : min(num, val);
        for (int i = 0; i <= m; i++) {
            vmi v = (vmi){true, i, index + 1, (thing || (i < num))};
            f(v);
        }
    }
    else {
        int m = thing ? 9 : num;
        for (int i = 0; i <= m; i++) {
            vmi v = (vmi){i < val, i, index+1, (thing || (i < num))};
            f(v);
        }
    }
    if (!cache.count(dolog)) {
        cache.emplace(dolog, r - old_r);
    }
}

bool az() {
    bool f;
    int last = s[0] - '0';
    for (int i = 1; i < s.size(); i++) {
        int c = s[i] - '0';
        if (c - '0' < last) {
            f = true;
        }
        else if (c - '0' > last && f)
            return false;
    }
    return true;
}

int main() {
    cin >> s;
    vmi v = (vmi){false, 0, 0, false};
    f(v);
    cout << r-az();
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base13/45
1Elfogadva0/03ms1876 KiB
2Elfogadva0/03ms2132 KiB
3Hibás válasz0/04ms2548 KiB
4Elfogadva1/13ms2652 KiB
5Elfogadva1/12ms2664 KiB
6Hibás válasz0/12ms2604 KiB
7Elfogadva1/13ms2824 KiB
8Elfogadva1/12ms2908 KiB
9Elfogadva1/13ms3036 KiB
10Elfogadva1/13ms3228 KiB
11Elfogadva1/13ms3444 KiB
12Elfogadva1/13ms3524 KiB
13Elfogadva2/23ms3528 KiB
14Elfogadva2/23ms3640 KiB
15Hibás válasz0/23ms3776 KiB
16Hibás válasz0/23ms3744 KiB
17Elfogadva1/13ms3748 KiB
18Hibás válasz0/23ms4016 KiB
19Hibás válasz0/23ms4068 KiB
20Hibás válasz0/24ms4148 KiB
21Hibás válasz0/34ms4436 KiB
22Hibás válasz0/23ms4220 KiB
23Hibás válasz0/23ms4184 KiB
24Hibás válasz0/23ms4192 KiB
25Hibás válasz0/24ms4508 KiB
26Hibás válasz0/24ms4468 KiB
27Hibás válasz0/24ms4504 KiB
28Hibás válasz0/24ms4508 KiB
29Hibás válasz0/24ms4764 KiB
30Hibás válasz0/24ms4976 KiB