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