Pagini recente » Cod sursa (job #1555432) | Cod sursa (job #2099009) | Cod sursa (job #1565475) | Cod sursa (job #764536) | Cod sursa (job #1239769)
#include <stdio.h>
#define MAXL 200
#define BAZA 10
#define MAXK 100
#define MOD 30103
int next[MAXL + 1][BAZA], last[BAZA], n[MAXL + 1], tab[MAXL + 1][MAXL + 1][MAXK];
int main(){
FILE *in = fopen("diviz.in", "r");
int k, a, b, i, j, len;
fscanf(in, "%d%d%d ", &k, &a, &b);
char ch = fgetc(in);
i = 1;
len = 0;
while(ch != '\n' && ch != EOF){
len++;
n[len] = ch - '0';
for(j = i - 1; j >= last[n[len]]; j--) next[j][n[len]] = i;
last[n[len]] = i;
i++;
ch = fgetc(in);
}
fclose(in);
for(i = 1; i < BAZA; i++){
tab[1][next[0][i]][i % k] = 1;
}
int r, l;
for(i = 1; i < b; i++){
for(j = 1; j < len; j++){
for(r = 0; r < k; r++){
for(l = 0; l < BAZA; l++){
if(next[i][l] != 0){
tab[i + 1][next[j][l]][(r * 10 + l) % k] += tab[i][j][r];
tab[i + 1][next[j][l]][(r * 10 + l) % k] %= MOD;
}
}
}
}
}
int rez = 0;
for(i = a; i <= b; i++){
for(j = 1; j <= len; j++){
rez += tab[i][j][0];
rez %= MOD;
}
}
FILE *out = fopen("diviz.out", "w");
fprintf(out, "%d", rez);
fclose(out);
return 0;
}