Pagini recente » Cod sursa (job #2986129) | Cod sursa (job #1544918) | Cod sursa (job #2758968) | Cod sursa (job #940969) | Cod sursa (job #652746)
Cod sursa(job #652746)
#include<cstdio>
#include<cstring>
using namespace std;
const int modulo = 30103;
const int NMAX = 200;
const int KMAX = 100;
int K, A, B, N;
char S[NMAX + 1];
int V[NMAX][2][KMAX];
int next[NMAX][10];
inline void add(int* p, int x)
{
(*p) += x;
(*p) = (*p) >= modulo ? (*p) - modulo : (*p);
}
int main()
{
freopen("diviz.in", "r", stdin);
freopen("diviz.out", "w", stdout);
scanf("%d %d %d ", &K, &A, &B);
fgets(S, (NMAX + 1) * sizeof(char), stdin);
N = strlen(S);
N--;
S[N] = 0;
for(int i = 0; i < N; i++)
for(int k = 0; k < 10; k++)
for(int j = i + 1; j < N; j++)
if(S[j] == '0' + k)
{
next[i][k] = j;
break;
}
int ok = 0;
int result = 0;
V[0][ok][(S[0] - '0')%K] = 1;
for(int i = 1; i < 10; i++)
if(i != S[0] - '0' && next[0][i])
{
V[next[0][i]][ok][i % K] = 1;
}
for(int j = 1; j <= B; j++, ok = !ok)
{
for(int i = 0; i < N; i++)
for(int k = 0; k < K; k++)
V[i][!ok][k] = 0;
for(int i = 0; i < N; i++)
{
for(int k = 0; k < K; k++)
if(V[i][ok][k])
for(int z = 0; z < 10; z++)
if(next[i][z])
add(&V[next[i][z]][!ok][(k * 10 + z) % K],V[i][ok][k]);
if(A <= j && V[i][ok][0])
add(&result, V[i][ok][0]);
}
}
printf("%d\n", result);
return 0;
}