Pagini recente » Cod sursa (job #2196390) | Cod sursa (job #22574) | Cod sursa (job #2298025) | Aparitii in presa preONI 2007 | Cod sursa (job #88375)
Cod sursa(job #88375)
#include<stdio.h>
#include<string.h>
char c[201];
long t[202];
long v[2][202][102];
int main()
{
freopen("diviz.in","r",stdin);
freopen("diviz.out","w",stdout);
long k,a,b,i,j,l,n,s=0;
memset(v,0,sizeof(v));
scanf("%ld %ld %ld",&k,&a,&b);
scanf("%s",c);
n = strlen(c);
for(i=1;i<=n;i++)
t[i] = c[i-1]-'0';
// v [a][b][c] = cate posibilitati cu lungimea a ultimul numar b restul c
v[0][0][0] = 1;
long next[10];
for(i = 0; i <= b ; i++)
{
long poz = i%2;
long poz2 = !poz;
for( j = i; j <= n ; j++)
{
for(long ii=0;ii<=9;ii++)
next[ii] =0;
for(l=j+1;l<=n;l++)
if(next[t[l]]==0) next[t[l]] = l;
for( l = 0; l < k; l++)
{
if(!v[poz][j][l]) continue;
if(i>=a && l == 0)
{
s = s+v[poz][j][l];
s = s%30103;
}
for( long ii = 0; ii<=9;++ii)
if(next[ii] && (ii!=0 || i!=0))
v[poz2][next[ii]][(l*10+ii)%k] = (v[poz2][next[ii]][(l*10+ii)%k]+v[poz][j][l])%30103;
v[poz][j][l] = 0;
}
}
}
printf("%ld\n",s);
return 0;
}