Pagini recente » Cod sursa (job #2636235) | Cod sursa (job #373062) | Cod sursa (job #1668322) | Cod sursa (job #1029012) | Cod sursa (job #2767837)
#include <fstream>
#include <string>
#include <iostream>
#include <cstring>
using namespace std;
unsigned short k, a, b, n;
char s[201];
const unsigned short MOD = 30103;
unsigned short rez;
unsigned short dp[2][101][201][10];
int main() {
ifstream f("diviz.in");
f >> k >> a >> b;
f >> s;
f.close();
unsigned short i, j, r, new_rest, cif, t = 0;
n = strlen(s);
dp[0][0][0][0] = dp[1][0][0][0] = 1;
for (i = 1; i <= n; i++) {
t = 1 - t;
for (j = 1; j <= n; j++)
for (r = 0; r < k; r++)
for (cif = 0; cif <= 9; cif++)
dp[t][r][j][cif] = (cif == s[i - 1] - '0' ? 0 : dp[1 - t][r][j][cif]);
for (j = 1; j <= n; j++)
for (r = 0; r < k; r++) {
new_rest = (r * 10 + (s[i - 1] - '0')) % k;
if (j == 1 && new_rest == 0 && s[i - 1] == '0')
continue;
for (cif = 0; cif <= 9; cif++) {
dp[t][new_rest][j][s[i - 1] - '0'] = (dp[t][new_rest][j][s[i - 1] - '0'] + dp[1 - t][r][j - 1][cif]);
if (dp[t][new_rest][j][s[i - 1] - '0'] >= MOD)
dp[t][new_rest][j][s[i - 1] - '0'] -= MOD;
}
}
}
t = n % 2;
for (i = a; i <= b; i++)
for (cif = 0; cif <= 9; cif++) {
rez = (rez + dp[t][0][i][cif]) % MOD;
if (rez >= MOD)
rez -= MOD;
}
ofstream g("diviz.out");
g << rez;
g.close();
return 0;
}