This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<iostream>
#include<stdio.h>
#include<vector>
using namespace std ;
long long st , en ;
long long dp[ 22 ][ 12 ][ 12 ][ 2 ] ;
vector < int > get ( long long x ) {
    vector < int > aux ;
    while ( x != 0 ) {
        aux.push_back ( ( x % 10 ) ) ;
        x /= 10 ;
    }
    vector < int > ret ;
    int i ;
    int sz = aux.size ( ) ;
    for ( i = sz - 1 ; i >= 0 ; i -- ) {
        ret.push_back ( aux[ i ] ) ;
    }
    return ret ;
}
long long f ( long long x ) {
    if ( x < 0 ) { return 0 ; }
    vector < int > v = get ( x ) ;
    int i , j , t , z , p ;
    int n = v.size ( ) ;
    for ( i = 0 ; i <= n ; i ++ ) {
        for ( j = 0 ; j <= 10 ; j ++ ) {
            for ( t = 0 ; t <= 10 ; t ++ ) {
                for ( z = 0 ; z < 2 ; z ++ ) {
                    dp[ i ][ j ][ t ][ z ] = 0 ;
                }
            }
        }
    }
    dp[ 0 ][ 10 ][ 10 ][ 1 ] = 1 ;
    for ( i = 0 ; i < n ; i ++ ) {
        for ( j = 0 ; j <= 10 ; j ++ ) {
            for ( t = 0 ; t <= 10 ; t ++ ) {
                for ( z = 0 ; z < 2 ; z ++ ) {
                    if ( dp[ i ][ j ][ t ][ z ] == 0 ) { continue ; }
                    if ( j == 10 && t == 10 ) {
                        dp[ i + 1 ][ j ][ t ][ 0 ] += dp[ i ][ j ][ t ][ z ] ;
                    }
                    if ( z == 0 ) {
                        for ( p = 0 ; p <= 9 ; p ++ ) {
                            if ( p == j || p == t ) { continue ; }
                            if ( t == 10 && p == 0 ) { continue ; }
                            dp[ i + 1 ][ t ][ p ][ 0 ] += dp[ i ][ j ][ t ][ z ] ;
                        }
                    }
                    else {
                        for ( p = 0 ; p <= v[ i ] ; p ++ ) {
                            if ( p == j || p == t ) { continue ; }
                            if ( t == 10 && p == 0 ) { continue ; }
                            int id = 0 ;
                            if ( p == v[ i ] ) { id = 1 ; }
                            dp[ i + 1 ][ t ][ p ][ id ] += dp[ i ][ j ][ t ][ z ] ;
                        }
                    }
                }
            }
        }
    }
    long long ret = 0 ;
    for ( j = 0 ; j <= 10 ; j ++ ) {
        for ( t = 0 ; t <= 10 ; t ++ ) {
            for ( z = 0 ; z < 2 ; z ++ ) {
                ret += dp[ n ][ t ][ j ][ z ] ;
            }
        }
    }
    return ret ;
}
void input ( ) {
    cin >> st >> en ;
}
void solve ( ) {
    printf ( "%lld\n" , f ( en ) - f ( st - 1 ) ) ;
}
int main ( ) {
    input ( ) ;
    solve ( ) ;
    return 0 ;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |