Pagini recente » Cod sursa (job #184571) | Cod sursa (job #1098957) | Cod sursa (job #1937588) | Cod sursa (job #486185) | Cod sursa (job #2087673)
#include <bits/stdc++.h>
#define MAXN 200
#define MAXK 100
#define MOD 30103
int d[2][1 + MAXN][1 + MAXK];
int firstapp[10][2 + MAXN];
int v[1 + MAXN];
int main(){
FILE*fi,*fo;
fi = fopen("diviz.in","r");
fo = fopen("diviz.out","w");
int k, a, b;
fscanf(fi,"%d%d%d", &k, &a, &b);
char c = fgetc(fi);
while(!isdigit(c)) c = fgetc(fi);
int n = 0;
while(isdigit(c)){
n++;
v[n] = c - '0';
c = fgetc(fi);
}
for(int cf = 0; cf < 10; cf++)
firstapp[cf][n + 1] = n + 1;
for(int i = n; i > 0; i--){
for(int cf = 0; cf < 10; cf++)
firstapp[cf][i] = firstapp[cf][i + 1];
firstapp[v[i]][i] = i;
}
for(int cf = 0; cf < 10; cf++)
d[1][firstapp[cf][1]][cf % k] = 1;
int ans = 0;
for(int len = 1; len <= b; len++){
for(int i = 1; i <= n; i++)
for(int r = 0; r < k; r++)
d[(len + 1) & 1][i][r] = 0;
for(int i = 1; i <= n; i++){
if(len > 1 || v[i] != 0)
for(int r = 0; r < k; r++)
for(int cf = 0; cf <= 9; cf++){
d[(len + 1) & 1][firstapp[cf][i + 1]][(r * 10 + cf) % k] += d[len & 1][i][r];
d[(len + 1) & 1][firstapp[cf][i + 1]][(r * 10 + cf) % k] %= MOD;
}
if(len >= a)
ans = (ans + d[len & 1][i][0]) % MOD;
}
}
fprintf(fo,"%d", ans);
fclose(fi);
fclose(fo);
return 0;
}