Pagini recente » Cod sursa (job #1252630) | Cod sursa (job #1964425) | Cod sursa (job #208249) | Cod sursa (job #2648324) | Cod sursa (job #138997)
Cod sursa(job #138997)
#include<stdio.h>
#include<string.h>
#define maxn (1<<8)
long k,a,b;
char sir[maxn];
unsigned short int v[101][100][101];
long next[maxn][16];
int main()
{
freopen("diviz.in","r",stdin);
freopen("diviz.out","w",stdout);
scanf("%ld %ld %ld",&k,&a,&b);
scanf("%s",sir);
long n = strlen(sir);
for( long cif = 0; cif <= 9; ++cif)
{
long max = n+1;
for(long i = n; i >= 0 ; --i)
{
next[i][cif] = max;
if( sir[i] -'0' == cif)
max = i;
}
if( max != n+1 && cif != 0)
{
v[max][cif%k][1] = 1;
}
}
long sol =0;
for( long i = 0; i < n; ++i)
{
for( long j = 0; j < k; ++j)
{
for( long l = 1; l <= i+1; ++l)
{
if( v[i][j][l] == 0 ) continue;
if( l >= a && l <= b && j == 0)
{
sol+=v[i][j][l];
if( sol >= 30103)
sol-= 30103;
}
if( l == b) continue;
for( long cif = 0; cif <= 9; ++cif)
{
long aux = next[i][cif];
if( aux == n+1) continue;
long aux2 = j + cif;
while( aux2 >= k)
aux2-=k;
v[aux][aux2][l+1]+=v[i][j][l];
if( v[aux][aux2][l+1] >= 30103)
v[aux][aux2][l+1] -= 30103;
}
}
}
}
printf("%ld\n",sol);
return 0;
}