2502 2023. 01. 14 16:02:22 mraron Szivárványszámok cpp17 Elfogadva 45/45 3ms 4624 KiB
#include<bits/stdc++.h>
using namespace std;
using ll = long long ;

string s;
ll dp[100][2][2][10];
ll calc(int ind, bool less, bool mid, int dig) {
    if(ind==(int)s.size()) return 1;
    if(dp[ind][less][mid][dig]!=-1) return dp[ind][less][mid][dig];
    ll ans=0;
    for(int i=0;i<10;++i) {
        if(!mid && (less || i<=s[ind]-'0')) {
            ans+=calc(ind+1, less|(i<s[ind]-'0'), dig>i, i);
        }
        if(mid && (less || i<=s[ind]-'0') && dig>=i) {
            ans+=calc(ind+1, less|(i<s[ind]-'0'), mid, i);
        }
    }
    return dp[ind][less][mid][dig]=ans;
}

int main() {
    cin>>s;
    memset(dp, -1, sizeof dp);
    
    bool is=false;
    for(int i=0;!is&&i<(int)s.size();++i) {
        bool ok=true;
        for(int j=1;j<=i;j++) {
            ok&=s[j]>=s[j-1];
        }
        for(int j=i+1;j<(int)s.size();++j) {
            ok&=s[j]<=s[j-1];
        }
        is|=ok;
    }    

    cout<<calc(0, 0, 0, 0)-is<<"\n";
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 45/45
1 Elfogadva 0/0 3ms 1908 KiB
2 Elfogadva 0/0 2ms 2112 KiB
3 Elfogadva 0/0 2ms 2196 KiB
4 Elfogadva 1/1 2ms 2320 KiB
5 Elfogadva 1/1 2ms 2528 KiB
6 Elfogadva 1/1 2ms 2732 KiB
7 Elfogadva 1/1 2ms 2808 KiB
8 Elfogadva 1/1 2ms 2928 KiB
9 Elfogadva 1/1 2ms 3132 KiB
10 Elfogadva 1/1 2ms 3216 KiB
11 Elfogadva 1/1 2ms 3340 KiB
12 Elfogadva 1/1 2ms 3544 KiB
13 Elfogadva 2/2 2ms 3748 KiB
14 Elfogadva 2/2 2ms 3716 KiB
15 Elfogadva 2/2 2ms 3852 KiB
16 Elfogadva 2/2 2ms 3928 KiB
17 Elfogadva 1/1 2ms 4048 KiB
18 Elfogadva 2/2 2ms 4128 KiB
19 Elfogadva 2/2 2ms 4124 KiB
20 Elfogadva 2/2 2ms 4128 KiB
21 Elfogadva 3/3 2ms 4344 KiB
22 Elfogadva 2/2 2ms 4224 KiB
23 Elfogadva 2/2 2ms 4356 KiB
24 Elfogadva 2/2 2ms 4436 KiB
25 Elfogadva 2/2 2ms 4512 KiB
26 Elfogadva 2/2 2ms 4516 KiB
27 Elfogadva 2/2 2ms 4492 KiB
28 Elfogadva 2/2 2ms 4496 KiB
29 Elfogadva 2/2 2ms 4412 KiB
30 Elfogadva 2/2 2ms 4624 KiB