Pagini recente » Istoria paginii runda/9_martie_simulare_oji_2024_clasele_11_12/clasament | Cod sursa (job #218278) | Cod sursa (job #845666) | Istoria paginii runda/pregatire_arhiva_educationala | Cod sursa (job #1074031)
#include <cstring>
#include <fstream>
using namespace std;
const int MAX_N = 202;
const int MAX_K = 102;
const int MOD = 30103;
int N, K, A, B, sol;
int D[2][MAX_N][MAX_K], M[MAX_N][10];
char s[MAX_N];
int main() {
ifstream f("diviz.in");
ofstream g("diviz.out");
f >> K >> A >> B;
f >> s;
int N = strlen(s);
for(int i = N; i >= 1; --i)
s[i] = s[i - 1];
for(int i = N; i >= 1; --i)
for(int j = 0; j < 10; ++j)
if(s[i] - '0' == j)
M[i][j] = i;
else M[i][j] = M[i + 1][j];
for(int j = 1; j < 10; ++j)
if(M[1][j] != 0)
++D[1][M[1][j]][j % K];
for(int i = 1, l = 1; i <= B; ++i, l ^= 1) {
memset(D[l ^ 1], 0, sizeof(D[l ^ 1]));
for(int j = 1; j <= N; ++j)
for(int k = 0; k < K; ++k)
for(int c = 0; c < 10; ++c) {
int j1 = M[j + 1][c];
if(j1 == 0)
continue;
int k1 = (k * 10 + c) % K;
D[l ^ 1][j1][k1] += D[l][j][k], D[l ^ 1][j1][k1] %= MOD;
}
if(i >= A)
for(int j = 1; j <= N; ++j)
sol += D[l][j][0], sol %= MOD;
}
g << sol << "\n";
f.close();
g.close();
return 0;
}