Pagini recente » Cod sursa (job #787029) | Cercuri 2 | DraStiK - infoarena | Cu mâinile curate | Cod sursa (job #888925)
Cod sursa(job #888925)
#include <fstream>
using namespace std;
ifstream in ("diviz.in");
ofstream out ("diviz.out");
#define n 201
#define k 101
int K, A, B, N, dp[n][n][k], first[10][n], Sol;
string numar;
int main()
{
int i, j, last, cif, r;
in >> K >> A >> B;
in >> numar;
N = numar.length();
for (i = N - 1; i >= 0; i--) numar[i + 1] = numar[i];
for (cif = 0; cif <= 9; cif++)
{
last = 0;
for (i = N; i >= 1; i--)
{
if ( (numar[i] - '0' ) == cif)
{
last = i;
first[cif][i - 1] = last;
}
else first[cif][i - 1] = last;
}
}
for (i = 1; i <= 9; i++)
{
if (first[i][0]) dp[1][ first[i][0] ][i % K] = 1;
}
for (j = 1; j <= N; j++)
{
for (i = j; i <= N; i++)
{
for (r = 0; r < K; r++)
{
for (cif = 0; cif <= 9; cif++)
{
if (first[cif][i]) dp[j + 1][first[cif][i]][(r*10+cif)%K] += dp[j][i][r];
}
}
}
}
for (j = A; j <= B; j++)
{
for (i = j; i <= N; i++)
{
Sol += dp[j][i][0];
}
}
out << Sol;
return 0;
}