Pagini recente » Cod sursa (job #2153412) | Cod sursa (job #1250935) | Cod sursa (job #2192860) | Cod sursa (job #2138289) | Cod sursa (job #28833)
Cod sursa(job #28833)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define nmax 256
#define kmax 128
#define cmax 10
#define MOD 30103
int k,n,a,b,first[cmax][nmax],i,j,l,nr[2][nmax][kmax],cc,ll,sol;
char s[nmax];
int main()
{
freopen("diviz.in","r",stdin);
freopen("diviz.out","w",stdout);
scanf("%d%d%d\n%s",&k,&a,&b,s);
n=strlen(s);
for (j=0;j<10;j++)
first[j][n]=-1;
for (i=n-1;i>=0;i--)
for (j=0;j<10;j++)
if (s[i]=='0'+j)
first[j][i]=i;
else
first[j][i]=first[j][i+1];
for (j=1;j<10;j++)
if (first[j][0]>=0)
nr[cc][first[j][0]][j%k]=1;
for (i=2;i<a;i++)
{
cc=1-cc;
memset(nr[cc],0,sizeof(nr[cc]));
for (j=0;j<n;j++)
for (l=0;l<k;l++)
if (nr[1-cc][j][l])
for (ll=0;ll<10;ll++)
if (first[ll][j+1]>0)
nr[cc][first[ll][j+1]][(l*10+ll)%k]=(nr[cc][first[ll][j+1]][(l*10+ll)%k]+nr[1-cc][j][l])%MOD;
}
for (;i<=b;i++)
{
cc=1-cc;
memset(nr[cc],0,sizeof(nr[cc]));
for (j=0;j<n;j++)
for (l=0;l<k;l++)
if (nr[1-cc][j][l])
for (ll=0;ll<10;ll++)
if (first[ll][j+1]>0)
nr[cc][first[ll][j+1]][(l*10+ll)%k]=(nr[cc][first[ll][j+1]][(l*10+ll)%k]+nr[1-cc][j][l])%MOD;
for (j=0;j<n;j++)
sol+=nr[cc][j][0],sol%=MOD;
}
printf("%d\n",sol);
return 0;
}