Pagini recente » Cod sursa (job #2173308) | Cod sursa (job #615233) | Cod sursa (job #2782014) | Cod sursa (job #2940010) | Cod sursa (job #20509)
Cod sursa(job #20509)
#include <stdio.h>
#include <string.h>
#define MOD 30103
char N[202];
long int k,a,b,n,rez,poz[11][202],v[202][101],v0[202][101],zece[202],aux0;
inline int modulo(int x)
{
while (x>=k) x-=k;
while (x<0) x+=k;
return x;
}
inline int Modulo(int x)
{
while (x>=MOD) x-=MOD;
return x;
}
int main()
{
FILE *f;
f=fopen("diviz.in","r");
fscanf(f,"%d %d %d",&k,&a,&b);
fscanf(f,"%s",N+1);
n=strlen(N+1);
fclose(f);
for (int i=1;i<=n;i++) N[i]-=48;
for (int t=0;t<10;t++) poz[t][n+1]=-1;
for (int i=n;i>0;i--)
{
for (int t=0;t<10;t++) poz[t][i]=poz[t][i+1];
poz[N[i]][i]=i;
}
memset(v0,0,sizeof(v0));
zece[0]=1;
for (int i=1;i<=b;i++) zece[i]=modulo(zece[i-1]*10);
for (int i=1;i<=n+1;i++) v0[i][0]=1;
for (int c=1;c<=b;c++)
{
memset(v,0,sizeof(v));
aux0=0;
for (int i=1;i<=n;i++)
for (int r=0;r<k;r++)
{
for (int t=0;t<10;t++)
if (poz[t][i]>0)
{
int auxr=modulo(r-zece[c-1]*t),
auxp=poz[t][i]+1;
v[i][r]=Modulo(v[i][r]+v0[auxp][auxr]);
if (i==1 && r==0 && t==0) aux0=v[i][r];
}
}
for (int i=0;i<=n+1;i++)
for (int r=0;r<k;r++)
v0[i][r]=v[i][r];
if (c>=a) rez=Modulo(rez+v[1][0]-aux0);
}
f=fopen("diviz.out","w");
fprintf(f,"%d\n",rez);
fclose(f);
return 0;
}