Pagini recente » Cod sursa (job #1596884) | Cod sursa (job #1921826) | Cod sursa (job #2791030) | Cod sursa (job #1757007) | Cod sursa (job #236290)
Cod sursa(job #236290)
#include <cstdio>
#include <cstring>
#define MAX_N 201
#define MAX_K 100
#define MOD 30103
int K, A, B, N;
char S[MAX_N];
int V[MAX_N], Rez;
int Ant[MAX_N][MAX_K], Act[MAX_N][MAX_K];
int Next[10][MAX_N];
int Nrc, Cf[MAX_K];
char viz[MAX_K];
void citire()
{
scanf("%d %d %d\n",&K, &A, &B);
fgets(S, sizeof S, stdin);
N = strlen(S) - 1;
for(int i = 1; i <= N; ++i)
{
V[i] = S[i-1] - '0';
if(viz[V[i]] == 0)
viz[V[i]] = 1,
Cf[++Nrc] = V[i];
for(int j = i; j >= 0; --j)
{
if(Next[V[i]][j]) break;
Next[V[i]][j] = i;
}
}
}
void solve()
{
for(int i = 1; i <= Nrc; ++i)
if(Cf[i])
Ant[Next[Cf[i]][0]][Cf[i] % K] = 1;
for(int k = 1; k <= B; ++k)
{
for(int i = 1; i <= N; ++i)
{
if(k >= A)
Rez += Ant[i][0],
Rez %= MOD;
for(int r = 0; r < K; ++r)
for(int j = 1; j <= Nrc; ++j)
Act[Next[Cf[j]][i+1]][(Cf[j] + r*10) % K] += Ant[i][r],
Act[Next[Cf[j]][i+1]][(Cf[j] + r*10) % K] %= MOD;
}
for(int i = 1; i <= N; ++i)
for(int r = 0; r < K; ++r)
Ant[i][r] = Act[i][r],
Act[i][r] = 0;
}
printf("%d\n",Rez);
}
int main()
{
freopen("diviz.in","rt",stdin);
freopen("diviz.out","wt",stdout);
citire();
solve();
}