Pagini recente » Cod sursa (job #3174181) | Cod sursa (job #3275955) | Cod sursa (job #2771551) | Cod sursa (job #516669) | Cod sursa (job #7359)
Cod sursa(job #7359)
#include <stdio.h>
#include <string.h>
#define NMAX 222
#define MOD 30103
#define min(a, b) ((a) < (b) ? (a):(b))
int V[NMAX][NMAX][NMAX], N, K, A, B, C[NMAX], F[NMAX][12][NMAX], Cate[NMAX];
char ss[NMAX];
int main()
{
int i, j, r, sum = 0, t, p, n = 1, s = 0, d = 1;
freopen("diviz.in", "r", stdin);
scanf("%d %d %d ", &K, &A, &B);
gets(ss);
N = strlen(ss);
for (i = 0; i < N; i++)
C[i+1] = ss[i]-48, Cate[ C[i+1] ]++;
V[s][1][C[1]%K] = 1;
for (i = 2; i <= N; i++)
{
V[d][1][C[i]%K] = 1;
for (j = 1; j <= min(i, B); j++)
for (r = 0; r < K; r++)
{
V[d][j][r] = (V[d][j][r]+V[s][j][r])%MOD;
V[d][j][t = (r*10+C[i])%K] = (V[d][j][t]+V[s][j-1][r])%MOD;
F[d][ C[i] ][r]++;
}
s = (s+1)&1;
d = (d+1)&1;
}
sum = 0;
for (i = A; i <= B; i++) sum = (sum+V[s][i][0])%MOD;
for (i = 0; i <= 9; i++)
if (F[s][i][0] > 0)
{
sum = sum-Cate[i]+1;
}
freopen("diviz.out", "w", stdout);
printf("%d\n", sum);
return 0;
}