Pagini recente » Cod sursa (job #73008) | Cod sursa (job #576541) | Cod sursa (job #347826) | Cod sursa (job #947638) | Cod sursa (job #30495)
Cod sursa(job #30495)
#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;
int first[10][201];
int lap[10];
int m[201][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;
for(i=1;i<a;i++)
{
x=i+1;
for(j=1;j<=l;j++)
for(cif=0;cif<10;cif++)
{
y=first[cif][j];
for(r=0;r<k;r++)
{
z=(r*10+cif)%k;
m[x][y][z]=(m[i][j][r]+m[x][y][z])%Mod;
}
}
}
for(i=a;i<=b;i++)
{
x=i+1;
for(j=1;j<=l;j++)
{
sol=(sol+m[i][j][0])%Mod;
for(cif=0;cif<10;cif++)
{
y=first[cif][j];
for(r=0;r<k;r++)
{
z=(r*10+cif)%k;
m[x][y][z]=(m[i][j][r]+m[x][y][z])%Mod;
}
}
}
}
freopen(Out,"w",f);
fprintf(f,"%d\n",sol);
fclose(f);
return 0;
}