Pagini recente » Cod sursa (job #1747432) | Cod sursa (job #1886575) | Cod sursa (job #2280248) | Cod sursa (job #2521292) | Cod sursa (job #6912)
Cod sursa(job #6912)
#include <stdio.h>
#include <string.h>
#define MAX_N 202
#define MAX_K 101
#define MOD 30103
int N, K, A, B, X[MAX_N];
int cnt[2][10][MAX_N][MAX_K];
int res;
int getrest(int x, int z)
{
int i, t, c, r;
if(z <= 8)
{
for(i = 1; i <= z; i++)
x *= 10;
return x % K;
}
for(i = 1; i <= 8; i++)
x *= 10;
r = x % K, t = (z-8)>>3, c = (z-8)&7;
for(i = 1; i <= t; i++)
r = r*(100000000%K), r %= K;
for(t = 1, i = 1; i <= c; i++)
t *= 10;
r = r*(t%K), r %= K;
return r;
}
void solve(void)
{
int u, v, i, j, r, c, t, rp, rnou;
u = 0, v = 1;
for(i = N; i >= 1; i--)
{
for(j = 1; j <= (N-i+1); j++)
for(r = 0; r < K; r++)
for(c = 0; c <= 9; c++)
if(c == X[i])
{
if(j == 1)
{
if(r == c%K)
cnt[v][c][j][r] = 1;
continue ;
}
else
{
rp = getrest(X[i], j-1), rnou = (r-rp+K)%K;
cnt[v][c][j][r] = 0;
for(t = 0; t <= 9; t++)
{
cnt[v][c][j][r] += cnt[u][t][j-1][rnou];
if(cnt[v][c][j][r] >= MOD)
cnt[v][c][j][r] -= MOD;
}
}
}
else
{
cnt[v][c][j][r] = cnt[u][c][j][r];
}
u ^= 1, v ^= 1;
}
for(c = 1; c <= 9; c++)
for(j = A; j <= B; j++)
{
res += cnt[u][c][j][0];
if(res >= MOD)
res -= MOD;
}
}
void read_data(void)
{
int i;
char sir[1024];
scanf("%d %d %d\n", &K, &A, &B);
scanf("%s\n", &sir), N = strlen(sir);
for(i = 1; i <= N; i++)
X[i] = sir[i-1]-48;
}
void write_data(void)
{
printf("%d\n", res);
}
int main(void)
{
freopen("diviz.in", "rt", stdin);
freopen("diviz.out", "wt", stdout);
read_data();
solve();
write_data();
return 0;
}