Pagini recente » Cod sursa (job #619718) | Cod sursa (job #2482519) | Cod sursa (job #26883) | Cod sursa (job #2655995) | Cod sursa (job #1855867)
#include <bits/stdc++.h>
using namespace std;
ifstream f("diviz.in");
ofstream g("diviz.out");
const int nMax = 203;
const int MOD = 30103;
char s[nMax];
int prec[nMax][13], dp[nMax][nMax][103], cif[nMax], v[nMax];
int main()
{
int k, a, b;
f >> k >> a >> b;
f >> (s + 1);
int n = strlen(s + 1);
for(int i = 1; i <= n; i++) {
cif[i] = s[i] - '0';
}
for(int i = n; i >= 1; i--)
{
v[cif[i]] = i;
for(int j = 0; j <= 9; j++)
prec[i][j] = v[j];
}
for(int i = 1; i <= 9; i++) {
if(prec[1][i]) {
dp[1][prec[1][i]][i % k] = 1;
}
}
int num = 0, ans = 0;
for(int i = 1; i <= b; i++) {
for(int j = i; j <= n; j++) {
if(i >= a) {
ans = (ans + dp[i][j][0])%MOD;
}
for(int r = 0; r <= k; r++) {
for(int c = 0; c <= 9; c++) {
if(prec[j + 1][c]) {
num = (r * 10 + c) % k;
int x = dp[i + 1][prec[j + 1][c]][num];
x += dp[i][j][r];
if(x > MOD) {
x -= MOD;
}
dp[i + 1][prec[j + 1][c]][num] = x;
}
}
}
}
}
g << ans << "\n";
return 0;
}