Pagini recente » Cod sursa (job #182235) | Cod sursa (job #1875747) | Cod sursa (job #585840) | Cod sursa (job #2274678) | Cod sursa (job #2914717)
#include <fstream>
using namespace std;
const int MAX_N = 200;
const int MAX_K = 100;
const int SIGMA = 10;
const int MOD = 30103;
unsigned short int dp[2][MAX_N + 1][MAX_K + 1], urm[MAX_N + 1][SIGMA + 1];
int k, a, b;
void addSelf(unsigned short int &a, int b) {
a += b;
if (a >= MOD) {
a -= MOD;
}
}
int main() {
ifstream fin("diviz.in");
ofstream fout("diviz.out");
string s;
fin >> k >> a >> b;
fin >> s;
int n = s.size();
for (int i = 0; i < SIGMA; i++) {
urm[n][i] = n;
}
for (int i = n - 1; i >= 0; i--) {
for (int j = 0; j < SIGMA; j++) {
if (s[i] - '0' == j) {
urm[i][j] = i;
} else {
urm[i][j] = urm[i + 1][j];
}
}
}
for (int i = 1; i < SIGMA; i++) {
dp[1][urm[0][i]][i % k] = 1;
}
unsigned short int answer = 0;
for (int len = 1; len <= b; len++) {
for (int i = 0; i < n; i++) {
for (int r = 0; r < k; r++) {
if (len >= a && r == 0) {
addSelf(answer, dp[len & 1][i][r]);
}
for (int _ = 0; _ < SIGMA; _++) {
addSelf(dp[(len & 1) ^ 1][urm[i + 1][_]][(r * 10 + _) % k], dp[len & 1][i][r]);
}
dp[len & 1][i][r] = 0;
}
}
}
fout << answer;
return 0;
}