Pagini recente » Cod sursa (job #280779) | Cod sursa (job #691192) | Cod sursa (job #2694899) | Cod sursa (job #2859256) | Cod sursa (job #935601)
Cod sursa(job #935601)
#include <cstdio>
#include <string.h>
#define mod 30103
#define Nmax 256
#define Kmax 128
int n, a, b, K, v[Nmax];
int c[Nmax][Kmax][16], d[Nmax][Kmax];
char viz[Nmax][Kmax];
void readdata()
{
freopen("diviz.in", "r", stdin);
freopen("diviz.out", "w", stdout);
char s[Nmax];
int i;
scanf("%d %d %d", &K, &a, &b);
scanf("%s", &s);
n = strlen(s);
for (i = 1; i <= n; ++i)
v[i] = s[i-1]-'0';
}
void solve()
{
int i, j, k, l, k2, val, rez = 0;
c[0][0][0] = 1;
for (i = 1; i <= n; ++i)
{
for (j = b; j >= 0; --j)
for (k = 0; k < K; ++k)
{
d[j][k] = 0;
viz[j][k] = 0;
}
for (j = b-1; j >= 0; --j)
for (k = 0; k < K; ++k)
{
if (v[i] == 0 && j == 0) continue;
val = 0;
for (l = 0; l < 10; ++l)
val += c[j][k][l];
k2 = (k*10+v[i]) % K;
d[j+1][k2] += val;
d[j+1][k2] %= mod;
viz[j+1][k2] = 1;
}
for (j = b; j >= 0; --j)
for (k = 0; k < K; ++k)
if (viz[j][k])
c[j][k][v[i]] = d[j][k];
}
for (j = a; j <= b; ++j)
for (l = 0; l < 10; ++l)
rez += c[j][0][l];
rez %= mod;
printf("%d\n", rez);
}
int main()
{
readdata();
solve();
return 0;
}