Pagini recente » Cod sursa (job #3167461) | Cod sursa (job #1643931) | Cod sursa (job #1017296) | Cod sursa (job #1806164) | Cod sursa (job #1164583)
#include<cstdio>
#include<cstring>
using namespace std;
#define NMAX 205
#define KMAX 101
#define MOD 30103
char s[NMAX];
int dp[NMAX][KMAX] , first[10][NMAX] , u[10] , K ,A , B ,sol , N , aux[NMAX][KMAX];
int main()
{
freopen("diviz.in" , "r" , stdin );
freopen("diviz.out" , "w" , stdout );
scanf("%d%d%d" , &K , &A , &B );
scanf("%s" , s+1 );
N = strlen(s+1);
for(int i = N ; i>=0 ; i--)
{
for(int cif = 0 ; cif <= 9 ; ++ cif)
first[cif][i] = u[cif];
u[s[i]-48] = i;
}
for(int cif = 1 ; cif <= 9 ; ++ cif)
{
dp[first[cif][0]][cif%K] = 1;
if(A == 1 && first[cif][0] && cif%K == 0)sol++;
}
for(int l = 2 ; l <= B ; ++l )
{
for(int i = 1 ; i<= N ; ++i )
for(int j = 0 ; j < K ; ++j )
aux[i][j] = dp[i][j],dp[i][j] = 0;
for(int i = 1 ; i < N ; ++i )
for(int r = 0 ; r < K ; ++r )
for(int cif = 0 ; cif <= 9 ; ++ cif )
{
dp[first[cif][i]][(r*10+cif)%K] += aux[i][r];
if(dp[first[cif][i]][(r*10+cif)%K] >= MOD)
dp[first[cif][i]][(r*10+cif)%K] -= MOD;
}
if(l >= A)
for(int i = 1 ; i<= N ; ++i )
{
sol += dp[i][0];
if(sol >= MOD)sol-=MOD;
}
}
printf("%d" , sol);
return 0;
}