Pagini recente » Cod sursa (job #2891897) | Cod sursa (job #1794382) | Cod sursa (job #2769026) | Cod sursa (job #60485) | Cod sursa (job #155806)
Cod sursa(job #155806)
#include<stdio.h>
#include<string.h>
#define lg 205
int K, lg1, lg2, i, j, k, x, raspuns, a[2][lg][lg], sr[11][lg], v[lg], n, cif, nxt;
char sir[lg];
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[0][i][v[i] % K] = 1;
for (i = 1; i <= n; i ++){
for (j = 1; j <= n; j ++){
if (i >= lg1 && i <= lg2)
raspuns += a[0][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[1][nxt][(k*10 + cif) % K] += a[0][j][k];
}
}
}
for (j = 1; j <= n; j ++)
for (k = 0; k < K; k ++)
a[0][j][k] = a[1][j][k], a[1][j][k] = 0;
}
printf("%d\n", raspuns);
return 0;
}