Cod sursa(job #2298305)

Utilizator Andrei-27Arhire Andrei Andrei-27 Data 7 decembrie 2018 23:01:06
Problema Diviz Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
#define MOD  30103 

using namespace std ;

int n , k , A , B ;
long long cnt ;
char s [ 205 ] ; 

int a [ 205 ][ 15 ] ;

void preprocess ()
{
   
    for ( int j = 0 , lm =-1  ; j < 10 ; ++ j , lm = -1 )
    {
        
    for ( int i = n ; i >= 0 ; i -- )
    {
        a [ i ][ j ] = lm ;
        if ( i )
        if ( s [ i - 1 ] - '0' == j )   lm = i ;
    }
    }
}

void dpr ( int i , int j , int r )
{
    
  for ( int p = 0 ; p < 10 ; ++ p )
      if ( a [ j ][ p ] != -1 ) 
      {
          if ( ( r * 10 + p ) % k == 0 && ( i + 1 ) >= A && i + 1 <= B )    cnt ++ ;
          dpr ( i + 1 , a [ j ][ p ] , ( r * 10 + p ) % k  ) ;
      }
}


int main ()
{
    cin >> k >> A >> B  ;
    cin >> s ;
    n = strlen ( s ) ; 
    preprocess () ;
    
    for ( int i = 0 ; i < 10 ; ++ i )   
    if ( a [ 0 ][ i ] != -1 )
    dpr ( 1 , a [ 0 ][ i ] , i % k ) ;
    
    cout << cnt % MOD ;

    return 0 ;
}