Pagini recente » Cod sursa (job #3236085) | Cod sursa (job #1629608) | Cod sursa (job #2614384) | Cod sursa (job #2627571) | Cod sursa (job #219227)
Cod sursa(job #219227)
#include <stdio.h>
#include <string.h>
#define MAX_N 256
#define MAX_K 128
#define MOD 30103
int K, A, B, L, C[2][MAX_N][MAX_K], S[MAX_N][10], N[MAX_N];
void process(void)
{
int i, T[10];
memset(T, 0xff, sizeof(T));
for (i = L - 1; i >= 0; i--)
{
memcpy(S[i], T, sizeof(int) * 10);
T[N[i]] = i;
}
}
int main(void)
{
int i, j, k, d, sols = 0, past = 0, present = 1;
char str[MAX_N];
freopen("diviz.in", "r", stdin);
freopen("diviz.out", "w", stdout);
scanf("%d %d %d\n", &K, &A, &B);
scanf("%s", str), L = strlen(str);
for (i = 0; i < L; i++)
N[i] = str[i] - '0';;
process();
for (i = 1; i < 10; i++)
if (S[0][i] >= 0 && i != N[0])
C[past][S[0][i]][i % K] = 1;
C[past][0][N[0] % K] = 1;
for (j = 1; j <= L; j++, past ^= 1, present ^= 1)
{
memset(C[present], 0, sizeof(C[present]));
for (i = 0; i < L; i++)
for (k = 0; k < K; k++)
{
if (!C[past][i][k])
continue;
if (A <= j && j <= B && k == 0)
sols = (sols + C[past][i][k]) % MOD;
for (d = 0; d < 10; d++)
if (S[i][d] > 0)
C[present][S[i][d]][(k * 10 + d) % K] =
(C[present][S[i][d]][(k * 10 + d) % K] +
C[past][i][k]) % MOD;
}
}
printf("%d\n", sols);
return 0;
}