Pagini recente » Cod sursa (job #1697030) | Cod sursa (job #509646) | Cod sursa (job #3255430) | Cod sursa (job #2428913) | Cod sursa (job #2225417)
#include <bits/stdc++.h>
#define N 205
#define K 105
#define MOD 30103
using namespace std;
ifstream fin("diviz.in") ;
ofstream fout("diviz.out") ;
int dp[N][K][N] , first[15][N] ;
string sir ;
int main()
{
int k , a , b , n , i , j , ii , cf , sol = 0 ;
fin >> k >> a >> b ;
fin >> sir ;
sir = "0"+sir ;
n = sir.size()-1 ;
for ( i = n ; i >= 1 ; i-- )
{
for ( j = 0 ; j <= 9 ; j++ )
{
if ( j == sir[i] - '0' )
first[j][i] = i ;
else
first[j][i] = first[j][i+1] ;
}
}
for ( i = 1 ; i <= 9 ; i++ )
dp[1][i%k][first[i][1]] = 1 ;
for ( i = 1 ; i <= n ; i++ )
{
for ( j = 0 ; j < k ; j++ )
{
for ( ii = 1 ; ii <= n ; ii++ )
{
for ( cf = 0 ; cf <= 9 ; cf++ )
{
if ( first[cf][ii+1] != 0 )
dp[i+1][(j*10+cf)%k][first[cf][ii+1]] = (dp[i][j][ii] + dp[i+1][(j*10+cf)%k][first[cf][ii+1]] )%MOD ;
if ( i >= a-1 && i < b && first[cf][ii+1] != 0 && (j*10+cf)%k == 0 )
sol = ( dp[i+1][(j*10+cf)%k][first[cf][ii+1]] + sol ) % MOD ;
}
}
}
}
/*for ( i = 1 ; i <= n ; i++ )
{
for ( j = 0 ; j < k ; j++ )
{
for ( ii = 1 ; ii <= n ; ii++ )
{
cout << "dp[" << i << "][" << j << "][" << ii << "] " << dp[i][j][ii] << endl ;
}
}
}*/
fout << sol ;
}