Pagini recente » Cod sursa (job #1534863) | Cod sursa (job #374713) | Cod sursa (job #1944033) | Cod sursa (job #1785517) | Cod sursa (job #20508)
Cod sursa(job #20508)
#include <stdio.h>
#include <string.h>
#define MOD 30103
#define NMAX 205
#define KMAX 105
#define CMAX 11
int A[NMAX][KMAX], B[NMAX][KMAX];
int Viz[CMAX], First[CMAX][NMAX];
char S[NMAX];
int N, K, L, U, i, j, cif, r;
int Sol;
int main()
{
freopen("diviz.in", "r", stdin);
freopen("diviz.out", "w", stdout);
scanf("%d %d %d\n", &K, &L, &U);
scanf("%s", S+1), N = strlen(S+1);
for (i = 1; i <= N; i++) Viz[S[i] - '0'] = 1;
for (cif = 0; cif <= 9; cif++)
for (i = 1; i <= N && Viz[cif]; i++)
{
for (j = i; j <= N; j++)
if (S[j] - '0' == cif) break;
if (j <= N) First[cif][i] = j;
}
for (cif = 0; cif <= 9; cif++)
if (Viz[cif]) A[First[cif][1]][cif % K] = 1;
for (j = 1; j <= U; j++)
{
for (i = 1; i <= N; i++)
{
for (r = 0; r < K; r++)
{
for (cif = 0; cif <= 9; cif++)
if (Viz[cif])
{
int cf = First[cif][i + 1];
int rn = ((r * 10) + cif) % K;
B[cf][rn] = (B[cf][rn] + A[i][r]) % MOD;
}
}
if (j >= L) Sol = (Sol + A[i][0]) % MOD;
}
memcpy(A, B, sizeof(B));
memset(B, 0, sizeof(B));
}
printf("%d\n", Sol % MOD);
return 0;
}