Pagini recente » Istoria paginii runda/oni_2009_1_10/clasament | Cod sursa (job #1636075) | Cod sursa (job #261878) | Cod sursa (job #2709157) | Cod sursa (job #236274)
Cod sursa(job #236274)
#include <cstdio>
#include <cstring>
#define MAX_N 205
#define MAX_K 105
#define MOD 30103
int K, A, B, N;
char S[MAX_N];
int V[MAX_N];
unsigned short T[MAX_N][MAX_N][MAX_K];
int Next[10][MAX_N];
void citire()
{
scanf("%d %d %d\n",&K, &A, &B);
fgets(S, MAX_N, stdin);
N = strlen(S) - 1;
for(int i = N; i; --i)
{
V[i] = S[i-1] - '0';
for(int j = i; j >= 0; --j)
Next[V[i]][j] = i;
}
}
void solve()
{
int q = 0;
for(int i = 1; i < 10; ++i)
if(Next[i][0])
T[1][Next[i][0]][i % K] = 1;
for(int k = 1; k < B; ++k)
for(int i = 1; i <= N; ++i)
for(int r = 0; r < K; ++r)
for(int j = 0; j < 10; ++j)
if(Next[j][0])
T[k+1][Next[j][i+1]][(j + r*10) % K] += T[k][i][r];
int Rez = 0;
for(int k = A; k <= B; ++k)
for(int i = 1; i <= N; ++i)
Rez += T[k][i][0],
Rez %= MOD;
printf("%d\n",Rez);
}
int main()
{
freopen("diviz.in","rt",stdin);
freopen("diviz.out","wt",stdout);
citire();
solve();
}