Pagini recente » Cod sursa (job #2296044) | Cod sursa (job #514718) | Cod sursa (job #2006865) | Cod sursa (job #79868) | Cod sursa (job #155785)
Cod sursa(job #155785)
#include<stdio.h>
#include<string.h>
int K, lg1, lg2, i, j, k, x, raspuns, a[50][50][50], sr[11][100], v[100], n, cif, nxt;
char sir[105];
int main()
{
freopen("diviz.in", "rt", stdin);
freopen("diviz.out", "wt", stdout);
scanf("%d%d%d\n", &K, &lg1, &lg2);
scanf("%s", sir);
n = strlen(sir);
for (i = 0; i < n; i ++)
v[i+1] = sir[i]-'0';
for (j = 0; j < 10; j ++)
for (i = n; i; i --){
if (v[i] == j)
sr[j][i] = i;
else
sr[j][i] = sr[j][i+1];
// printf("sr[%d][%d] este ---> %d\n", j, i, sr[j][i]);
}
for (i = 1; i <= n; i ++)
a[1][i][v[i] % K] = 1;
for (i = 1; i <= n; i ++)
for (j = 1; j <= n; j ++){
if (i >= lg1 && i <= lg2)
raspuns += a[i][j][0];
for (k = 0; k < K; k ++){
// printf("a[%d][%d][%d] este ---> %d\n", i, j, k, a[i][j][k]);
for (cif = 0; cif < 10; cif ++){
nxt = sr[cif][j+1];
a[i+1][nxt][(k*10 + cif) % K] += a[i][j][k];
}
}
}
printf("%d\n", raspuns);
return 0;
}