Pagini recente » Cod sursa (job #1636099) | Cod sursa (job #1966924) | Cod sursa (job #832948) | Cod sursa (job #1695737) | Cod sursa (job #1892607)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream in("diviz.in");
ofstream out("diviz.out");
const int szMax = 205;
const int kMax = 105;
const int MOD = 30103;
int k, a, b, sz;
char v[szMax];
unsigned short dp[szMax][kMax][szMax];
bool viz[10][szMax];
bool first_viz[10];
void citire()
{
in >> k >> a >> b;
in >> v;
sz = strlen(v);
for(int i = 0; i < sz; ++i)
v[i] -= '0';
}
void rezolvare()
{
first_viz[0] = true;
for(int i = 0; i < sz; ++i)
{
if(first_viz[v[i]] == true)
continue;
first_viz[v[i]] = true;
dp[i][v[i] % k][1] = 1;
}
int x, y;
for(int i = 0; i < sz; ++i)
{
for(int r = 0; r < k; ++r)
{
for(int c = 1; c <= i + 1; ++c)
{
for(int j = i + 1; j < sz; ++j)
{
if(viz[v[j]][c])
continue;
viz[v[j]][c] = true;
x = (r * 10 + v[j]) % k;
dp[j][x][c+1] = (dp[j][x][c+1] + dp[i][r][c]) % MOD;
}
}
memset(viz, 0, sizeof(viz));
}
}
}
void afisare()
{
int rasp = 0;
for(int i = 0; i < sz; ++i)
for(int j = a; j <= b; ++j)
rasp = (rasp + dp[i][0][j]) % MOD;
out << rasp;
}
int main()
{
citire();
rezolvare();
afisare();
return 0;
}