Pagini recente » Cod sursa (job #61670) | Cod sursa (job #2057083) | Cod sursa (job #637051) | Cod sursa (job #2287450) | Cod sursa (job #2087667)
#include <bits/stdc++.h>
#define MAXN 200
#define MAXK 100
#define MOD 30103
int d[1 + MAXN][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++)
firstapp[cf][0] = firstapp[cf][1];
d[0][0][0] = 1;
int ans = 0;
for(int i = 0; i <= n; i++){
if(v[i] != 0 || i == 0)
for(int len = 0; len < b; len++)
for(int r = 0; r < k; r++)
for(int cf = 0; cf <= 9; cf++){
d[firstapp[cf][i + 1]][len + 1][(r * 10 + cf) % k] += d[i][len][r];
d[firstapp[cf][i + 1]][len + 1][(r * 10 + cf) % k] %= MOD;
}
else
for(int len = 2; len < b; len++)
for(int r = 0; r < k; r++)
for(int cf = 0; cf <= 9; cf++){
d[firstapp[cf][i + 1]][len + 1][(r * 10 + cf) % k] += d[i][len][r];
d[firstapp[cf][i + 1]][len + 1][(r * 10 + cf) % k] %= MOD;
}
for(int len = a; len <= b; len++)
ans = (ans + d[i][len][0]) % MOD;
}
fprintf(fo,"%d", ans);
fclose(fi);
fclose(fo);
return 0;
}