Pagini recente » Istoria paginii utilizator/vladpetre | Cod sursa (job #2671544) | Profil vlad060297 | Cod sursa (job #1750791) | Cod sursa (job #1769997)
#include <iostream>
#include <cstdio>
#define MAXN 220
#define MAXK 110
#define MOD 30103
using namespace std;
int mod(int &e)
{
if (e >= MOD) e-= MOD;
}
int k, a, b;
char s[MAXN];
int sir[MAXN], n;
int din[2][MAXN][MAXK], u[MAXN][15];
void read()
{
scanf("%d %d %d\n", &k, &a, &b);
gets(s);
for (int i = 0; s[i]; i++)
sir[i+1] = s[i] - '0', n = i+1;
for (int i = n; i >= 1; i--)
for (int j = 0; j < 10; j++)
u[i][j] = (sir[i] == j ? i : u[i+1][j]);
}
void solve()
{
for (int i = 1; i <= n; i++)
if (sir[i] != 0 && u[1][sir[i]] == i)
din[0][i][sir[i] % k] = 1;
int rez = 0, crt = 1;
for (int i = 1; i <= b; i++) {
for (int j = 1; j <= n; j++)
for (int r = 0; r < k; r++)
din[crt][j][r] = 0;
crt ^= 1;
for (int j = 1; j <= n; j++) {
for (int r = 0; r < k; r++)
for (int c = 0; c < 10; c++)
mod(din[!crt][u[j+1][c]][(10*r + c) % k] += din[crt][j][r]);
if (i >= a)
mod(rez += din[crt][j][0]);
}
}
printf("%d", rez);
}
int main()
{
freopen("diviz.in", "r", stdin);
freopen("diviz.out", "w", stdout);
read();
solve();
return 0;
}