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 |