Pagini recente » Cod sursa (job #2225921) | Cod sursa (job #727549) | Cod sursa (job #150133) | Cod sursa (job #1581225) | Cod sursa (job #30545)
Cod sursa(job #30545)
#include<stdio.h>
#include<string.h>
#define Mod 30103
#define In "diviz.in"
#define Out "diviz.out"
FILE *f;
char n[205];
int l,k,a,b,i,j,r,cif,x,y,z,sol,tx,p;
int first[10][201];
int lap[10];
int m[2][201][100];
int main()
{
f=fopen(In,"r");
fscanf(f,"%d%d%d\n",&k,&a,&b);
fgets(n+1,204,f);
l=strlen(n+1);
if(n[l]=='\n');
n[l--]='\0';
for(i=1;i<=l;i++) n[i]-='0';
for(i=l;i>=0;i--)
{
for(j=0;j<10;j++) first[j][i]=lap[j];
lap[n[i]]=i;
}
for(j=1;j<10;j++)
m[1][first[j][0]][j%k]=1;
p=k*sizeof(int);
for(i=1;i<a;i++)
{
tx=i%2; x=!tx;
for(j=1;j<=l;j++)
memset(m[x][j],0,p);
for(j=i;j<=l;j++)
for(r=0;r<k;r++)
{m[tx][j][r]%=Mod;
if(m[tx][j][r])
for(cif=0;cif<10;cif++)
m[x][first[cif][j]][(r*10+cif)%k]+=m[tx][j][r];
}
}
for(i=a;i<b;i++)
{
tx=i%2; x=!tx;
// memset(m[tx],0,sizeof(m[tx]));
for(j=1;j<=l;j++)
memset(m[x][j],0,p);
for(j=i;j<=l;j++)
{
sol=(sol+m[tx][j][0])%Mod;
for(r=0;r<k;r++)
{
m[tx][j][r]%=Mod;
if(m[tx][j][r])
for(cif=0;cif<10;cif++)
m[x][first[cif][j]][(r*10+cif)%k]+=m[tx][j][r];
}
}
}
for(tx=i%2,j=1;j<=l;j++)
sol=(sol+m[tx][j][0])%Mod;
freopen(Out,"w",f);
fprintf(f,"%d\n",sol);
fclose(f);
return 0;
}