Pagini recente » Cod sursa (job #1805435) | Cod sursa (job #2685643) | Cod sursa (job #2452369) | Istoria paginii utilizator/xxenok | Cod sursa (job #1549991)
#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 = '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-'0')%K] = 1;
for (int l = 1; l <= B; l ++) {
for (int i = l; i <= N; i ++) {
for (int k = 0; k < K; k ++) {
for (int c = '0'; c <= '9'; c ++) {
if (Next[c][i+1] != 0) {
D[(l+1)&1][Next[c][i+1]][(k*10+c-'0')%K] += D[l&1][i][k];
if (D[(l+1)&1][Next[c][i+1]][(k*10+c-'0')%K] >= MOD)
D[(l+1)&1][Next[c][i+1]][(k*10+c-'0')%K] -= MOD;
}
}
if (k != 0)
D[l&1][i][k] = 0;
}
if (l >= A) {
sol += D[l&1][i][0];
if (sol >= MOD)
sol -= MOD;
}
D[l&1][i][0] = 0;
}}
printf ("%d\n", sol);
return 0;
}