Pagini recente » Cod sursa (job #2854279) | Cod sursa (job #1533332) | Cod sursa (job #2751390) | Cod sursa (job #3149200) | Cod sursa (job #1774872)
#include <bits/stdc++.h>
using namespace std;
const int Mod = 30103;
const int Nmax = 202;
char aul[Nmax];
int K, A, B, i, j, n, xr, l, r, c, ans=0;
int Cif[12], a[Nmax], cf[Nmax][12], d[2][Nmax][Nmax>>1], rest[Nmax>>1][12];
void mod(int& x)
{
if(x>=Mod) x-=Mod;
}
int main()
{
freopen("diviz.in", "r", stdin);
freopen("diviz.out", "w", stdout);
scanf("%d%d%d\n", &K, &A, &B);
gets(aul+1);
n = strlen(aul+1);
for(i=1; i<=n; ++i) a[i] = aul[i]-'0';
for(i=0; i<=9; ++i) Cif[i] = -1;
for(i=n; i; --i)
{
Cif[a[i]] = i;
for(j=0; j<=9; ++j)
cf[i][j] = Cif[j];
}
for(i=0; i<K; ++i)
for(j=0; j<=9; ++j)
rest[i][j] = (i*10+j)%K;
xr=0;
for(i=1; i<=9; ++i)
if(cf[1][i]!=-1)
d[xr][cf[1][i]][i%K] = 1;
for(l=1; l<=B && l<=n; ++l, xr^=1)
{
for(i=1; i<=n; ++i)
for(c=0; c<=9; ++c)
if(cf[i+1][c]!=-1)
for(r=0; r<K; ++r)
{
d[xr^1][cf[i+1][c]][rest[r][c]] += d[xr][i][r];
mod(d[xr^1][cf[i+1][c]][rest[r][c]]);
}
for(i=1; i<=n; ++i)
for(r=0; r<K; ++r)
{
if(!r && A<=l && l<=B)
ans += d[xr][i][r];
d[xr][i][r] = 0;
}
mod(ans);
}
printf("%d\n", ans);
return 0;
}