Pagini recente » Cod sursa (job #586869) | Cod sursa (job #332525) | Cod sursa (job #2552343) | Cod sursa (job #81192) | Cod sursa (job #153497)
Cod sursa(job #153497)
#include<stdio.h>
#include<string.h>
int K, lg1, lg2, i, j, k, x, raspuns, a[50][50][50], d[100][100][10], v[100], n;
char sir[105];
inline int md(int a){
int x;
if (a >= 0)
x = k - a;
else
x = K + a;
if (x % 2 == 0)
x /= 2;
if (x % 5 == 0)
x /= 5;
return x;
}
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';
a[1][1][v[1] % K] = 1;
a[1][0][0] = 1;
/*
for (i = 2; i <= n; i ++)
for (j = 1; j <= n; j ++)
for (k = 0; k < K; k ++){
a[i][j][k] += a[i-1][j][k];
x = md(k - v[i] % K);
a[i][j][k] += a[i-1][j-1][x] - d[j][k][v[i]];
d[j][k][v[i]] = a[i][j][k];
}
*/
for (i = 1; i <= n; i ++)
for (j = 0; j <= n; j ++)
for (k = 0; k < K; k ++){
a[i][j][k] -= d[j][k][v[i]];
d[j][k][v[i]] = a[i][j][k];
a[i+1][j][k] += a[i][j][k];
a[i+1][j+1][(k*10 + v[i+1]) % K] += a[i][j][k];
}
/*
for (i = 1; i <= n; i ++)
for (j = 1; j <= n; j ++)
for (k = 0; k < K; k ++)
fprintf(stderr, "pentru %d si %d si %d avem --------> %d\n", i, j, k, a[i][j][k]);
*/
for (i = lg1; i <= lg2; i ++)
for (k = 0; k < 10; k ++)
raspuns += d[i][0][k];
printf("%d\n", raspuns);
return 0;
}