Pagini recente » Cod sursa (job #1683654) | Cod sursa (job #2098215) | Cod sursa (job #1089547) | Cod sursa (job #2292018) | Cod sursa (job #756402)
Cod sursa(job #756402)
#include<cstdio>
#include<cstring>
const int MAX_N = 202 ;
const int MOD = 30103 ;
const int MAX_C = 10 ;
int a[MAX_N][MAX_N],b[MAX_N][MAX_N] ;
int cif[MAX_C][MAX_N];
char s[MAX_N];
int k,minim,maxim ;
int sol ;
int main()
{
freopen("diviz.in","r",stdin);
freopen("diviz.out","w",stdout);
scanf("%d%d%d",&k,&minim,&maxim);
scanf("%s",s);
int n = strlen(s) ;
for(int j=0;j<=9;++j)
{
cif[j][n-1] = n ;
cif[j][n] = n ;
}
cif[s[n-1] - '0'][n-1] = n-1 ;
for(int i=n-2;i>=0;--i)
{
for(int j=0;j<=9;++j)
{
if( s[i] - '0' == j )
cif[j][i] = i ;
else
cif[j][i] = cif[j][i+1] ;
}
}
for(int i=1;i<=9;++i)
if( cif[i][0] < n )
a [ cif[i][0] ][i % k] = 1 ;
for(int ind=2;ind<=n;++ind)
{
for(int i=0;i<=n;++i)
for(int j=0;j<=k;++j)
b[i][j] = 0 ;
for(int i=ind-2;i<n;++i)
{
for(int j=0;j<k;++j)
{
if( a[i][j] != 0 )
{
for(int cifra=0;cifra<=9;++cifra)
{
if( cif[cifra][i+1] != n )
{
b[ cif[cifra][i+1] ][ (j*10+cifra)%k ] += a[i][j] ;
b[ cif[cifra][i+1] ][ (j*10+cifra)%k ] %= MOD ;
}
}
}
}
}
for(int i=0;i<n;++i)
{
for(int j=0;j<k;++j)
{
a[i][j] = b[i][j] ;
if( j==0 && ind >= minim && ind <= maxim )
sol = ( sol + b[i][j] ) % MOD ;
}
}
}
printf("%d\n",sol);
return 0;
}