Pagini recente » Cod sursa (job #1459270) | Cod sursa (job #1283701) | Cod sursa (job #2438492) | Cod sursa (job #904510) | Cod sursa (job #1549999)
#include <cstdio>
#include <cstring>
#define DIM 256
#define MOD 30103
using namespace std;
int N, K, A, B, sol; char S[DIM];
int D[2][DIM][DIM/2], Next[DIM][DIM];
int main () {
freopen ("diviz.in" ,"r", stdin );
freopen ("diviz.out","w", stdout);
scanf ("%d %d %d", &K, &A, &B);
scanf ("%s", S + 1); N = strlen (S + 1);
for (int i = 1; i <= N; i ++)
S[i] -= '0';
for (int i = 0; i <= 9; i ++) {
for (int j = N; j >= 1; j --) {
if (S[j] == i)
Next[i][j] = j;
else
Next[i][j] = Next[i][j+1];
}
}
for (int c = 1; c <= 9; c ++)
D[1][Next[c][1]][c%K] = 1;
for (int l = 1; l <= B; l ++) {
memset (D[(l+1)&1], 0, sizeof(D[(l+1)&1]));
for (int i = l; i <= N - (B-l-4); i ++) {
for (int k = 0; k < K; k ++) {
if (D[l&1][i][k] == 0)
continue;
for (int c = 0; c <= 9; c ++) {
if (Next[c][i+1] != 0) {
D[(l+1)&1][Next[c][i+1]][(k*10+c)%K] += D[l&1][i][k];
if (D[(l+1)&1][Next[c][i+1]][(k*10+c)%K] >= MOD)
D[(l+1)&1][Next[c][i+1]][(k*10+c)%K] -= MOD;
}
}
}
if (l >= A) {
sol += D[l&1][i][0];
if (sol >= MOD)
sol -= MOD;
}
}
}
printf ("%d\n", sol);
return 0;
}