6753 2023. 12. 18 19:09:43 111 Szivárványszámok cpp17 Elfogadva 45/45 3ms 3824 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define double long double

#define pii pair<int, int>

signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
#ifdef CB
	freopen("be2.txt", "r", stdin);
//	freopen("out.txt", "w", stdout);
#endif

	int a[80][10] = {};
	int b[80][10] = {};
	a[0][0] = 1;
	b[0][0] = 1;
	for (int i = 1; i < 80; i++) {
		for (int j = 0; j < 10; j++) {
			a[i][j] += a[i - 1][j];
			for (int k = 0; k < j; k++) {
				a[i][j] += a[i - 1][k];
				b[i][j] += a[i - 1][k];
			}
		}
	}
	
	string S;
	cin >> S;
	int N = S.size();
	S += '1';
	for (char& c : S) {
		c -= '0';
	}
	
	int ans = 0;
	
	// last max is i
	for (int i = 0; i < N && (i == 0 || S[i] >= S[i - 1]); i++) {
		// top is i
		// S[i + 1] = j
		for (int j = 0; j < S[i] && j < S[i + 1]; j++) {
			ans += a[N - (i + 1)][j];
		}
		if (S[i + 1] < S[i]) {
			// last max is actually j
			for (int j = i + 1; j < N && S[j] <= S[j - 1]; j++) {
				for (int k = 0; k <= S[j] && k < S[j + 1]; k++) {
					ans += a[N - (j + 1)][k];
				}
			}
		}
		// S[i + 1] = j
		for (int j = S[i]; j < S[i + 1]; j++) {
			// top is i + 1
			ans += b[N - (i + 1)][j];
			// top is k
			for (int k = i + 2; k < N; k++) {
				// S[k] = l
				for (int l = j; l < 10; l++) {
					ans += a[k - (i + 1)][l - j] * b[N - k][l];
				}
			}
		}
	}

	// S[0] is already not max
	// S[0] is i
	for (int i = 0; i < S[0]; i++) {
		// top is 0
		ans += b[N][i];
		// top is j
		for (int j = 1; j < N; j++) {
			// S[j] = k
			for (int k = i; k < 10; k++) {
				ans += a[j][k - i] * b[N - j][k];
			}
		}
	}
	
	ans++;
	
	int j = 0;
	while (j < N && (j == 0 || S[j] >= S[j - 1])) j++;
	while (j < N && (j == 0 || S[j] <= S[j - 1])) j++;
	
	ans -= j == N;
	
	cout << ans << '\n';
	return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 45/45
1 Elfogadva 0/0 3ms 1840 KiB
2 Elfogadva 0/0 3ms 2028 KiB
3 Elfogadva 0/0 3ms 2248 KiB
4 Elfogadva 1/1 3ms 2456 KiB
5 Elfogadva 1/1 3ms 2676 KiB
6 Elfogadva 1/1 3ms 2892 KiB
7 Elfogadva 1/1 3ms 3088 KiB
8 Elfogadva 1/1 3ms 3192 KiB
9 Elfogadva 1/1 3ms 3404 KiB
10 Elfogadva 1/1 3ms 3492 KiB
11 Elfogadva 1/1 3ms 3488 KiB
12 Elfogadva 1/1 3ms 3492 KiB
13 Elfogadva 2/2 3ms 3484 KiB
14 Elfogadva 2/2 3ms 3492 KiB
15 Elfogadva 2/2 3ms 3488 KiB
16 Elfogadva 2/2 3ms 3612 KiB
17 Elfogadva 1/1 3ms 3692 KiB
18 Elfogadva 2/2 3ms 3792 KiB
19 Elfogadva 2/2 3ms 3784 KiB
20 Elfogadva 2/2 3ms 3800 KiB
21 Elfogadva 3/3 3ms 3804 KiB
22 Elfogadva 2/2 3ms 3804 KiB
23 Elfogadva 2/2 3ms 3804 KiB
24 Elfogadva 2/2 3ms 3800 KiB
25 Elfogadva 2/2 3ms 3800 KiB
26 Elfogadva 2/2 3ms 3804 KiB
27 Elfogadva 2/2 3ms 3808 KiB
28 Elfogadva 2/2 3ms 3820 KiB
29 Elfogadva 2/2 3ms 3824 KiB
30 Elfogadva 2/2 3ms 3812 KiB