Pagini recente » Cod sursa (job #1646490) | Cod sursa (job #772135) | Cod sursa (job #8580) | Cod sursa (job #1682520) | Cod sursa (job #1774753)
#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, Cif[12], a[Nmax], cf[Nmax][12], xr, d[2][Nmax][Nmax>>1], l, r, c, ans=0;
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];
}
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<=n; ++l, xr^=1)
{
for(i=l; 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]][(r*10+c)%K] += d[xr][i][r];
mod(d[xr^1][cf[i+1][c]][(r*10+c)%K]);
}
for(i=l; i<=n; ++i)
for(r=0; r<K; ++r)
{
if(!r && A<=l && l<=B)
{
ans += d[xr][i][r];
mod(ans);
}
d[xr][i][r] = 0;
}
}
printf("%d\n", ans);
return 0;
}