Pagini recente » Cod sursa (job #2239573) | Cod sursa (job #1146535) | Cod sursa (job #104622) | Cod sursa (job #810723) | Cod sursa (job #80670)
Cod sursa(job #80670)
# include <stdio.h>
# include <string.h>
const long int MODULO=30103;
const long int MAXN=200;
long int nr[MAXN+1][10][MAXN+1];
long int n,k,a,b;
char s[1000];
long int p10[201];
void citire()
{
FILE *f=fopen("diviz.in","r");
fscanf(f,"%ld%ld%ld",&k,&a,&b);
fgets(s,1000,f);
fgets(s+1,1000,f);
n=strlen(s+1);
s[n]=s[n+1];
n--;
fclose(f);
}
long int normal(long int a)
{
if (a>=0) return a%k;
while (a<0) a+=k;
return a;
}
void init_p10()
{
p10[0]=1;
long int i;
for (i=1;i<=n+1;i++)
p10[i]=(p10[i-1]*10)%k;
}
long int min(long int a,long int b) {if (a>b) return b; return a;}
long int calculeaza()
{
long int i,x,r,cf,cf2;
long int sel[MAXN+1][11][11]={0};
for (i=n;i>=1;i--)
{
cf=(long int)s[i]-(long int)'0';
for (x=min(n-i+1,b);x>=2;x--)
for (r=0;r<=k-1;r++)
{
nr[x][cf][r]=0;
for (cf2=0;cf2<=9;cf2++)
// if (!sel[x][cf][cf2])
{
nr[x][cf][r]+=nr[x-1][cf2][normal(r-p10[x-1]*cf)];
nr[x][cf][r]%=MODULO;
sel[x][cf][cf2]=1;
}
}
// if (!sel[1][cf][10])
{
nr[1][cf][cf%k]=1;
}
}
long int sol=0;
for (cf=1;cf<=9;cf++)
for (i=a;i<=b;i++)
{
sol+=nr[i][cf][0];
sol%=MODULO;
}
return sol;
}
void scrie(long int a)
{
FILE *g=fopen("diviz.out","w");
fprintf(g,"%ld\n",a);
fcloseall();
}
int main()
{
citire();
init_p10();
long int sol=calculeaza();
scrie(sol);
return 0;
}