Pagini recente » Cod sursa (job #2867775) | Cod sursa (job #1377714) | Cod sursa (job #2569278) | Cod sursa (job #2849803) | Cod sursa (job #1839974)
#include <cstdio>
#include <cstring>
#include <vector>
#define MAXN 202
#define MAXK 101
#define MOD 30103
using namespace std;
int d[2][MAXN][MAXK], v[MAXN], pos[MAXN][10];
char s[MAXN];
bool found[10];
int main()
{
freopen("diviz.in", "r", stdin);
freopen("diviz.out", "w", stdout);
int n, i, j, k, a, b, t, cif, ans = 0;
scanf("%d%d%d\n", &k, &a, &b);
gets(s+1);
n = strlen(s+1);
for(i=1; i<=n; ++i)
v[i] = s[i]-'0';
for(i=1; i<=n; ++i)
for(j=i+1; j<=n; ++j)
if(!pos[i][v[j]])
pos[i][v[j]] = j;
for(i=1; i<=n; ++i)
if(!found[v[i]] && v[i])
{
found[v[i]] = 1;
d[1][i][v[i]%k] = 1;
if(a == 1 && v[i]%k == 0)
ans++;
}
for(i=1; i<b; ++i)
{
memset(d[(i+1)&1], 0, sizeof(d[(i+1)&1]));
for(j=1; j<=n; ++j)
for(t=0; t<k; ++t)
if(d[i&1][j][t])
for(cif=0; cif<10; ++cif)
if(pos[j][cif]){
d[(i+1)&1][pos[j][cif]][(t*10 + cif)%k] = (d[(i+1)&1][pos[j][cif]][(t*10 + cif)%k] + d[i&1][j][t]);
if(d[(i+1)&1][pos[j][cif]][(t*10 + cif)%k] >= MOD) d[(i+1)&1][pos[j][cif]][(t*10 + cif)%k] -= MOD;
}
if(i>=a-1)
{
for(j=1; j<=n; ++j)
ans = (ans + d[(i+1)&1][j][0]);
ans %= MOD;
}
}
/*
for(i=1; i<=b; i++){
for(j=1; j<=n; ++j){
for(t=0; t<k; ++t)
printf("%d ", d[i][j][t]);
printf("\n");
}
printf("\n");
}*/
printf("%d", ans);
return 0;
}