Pagini recente » Cod sursa (job #2744841) | Cod sursa (job #2823363) | Cod sursa (job #1007015) | Cod sursa (job #487413) | Cod sursa (job #2190657)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("diviz.in");
ofstream fout("diviz.out");
const int MOD = 30103;
short dp[205][205][105],prc[205][10];
int main()
{
///dp[len][i][r] = numarul de numere distincte de lungime len
///care se termina pe pozitia i in n si au restul r prin impartirea la k
///solutia dp[a->b][1->n][0];
int k,a,b;
fin >> k >> a >> b;
string x;
fin >> x;
int n=x.size();
x="#"+x; /// indexare de la 1;
for(int i=0;i<n;i++)
{
for(int j=i+1;j<=n;j++) /// prc[i][j]=prima cifra de j din dreapta pozitiei i;
{
if(prc[i][x[j]-'0']==0)
prc[i][x[j]-'0']=j;
//fout << prc[i][x[j]] << ' ';
}
//fout << '\n';
}
dp[0][0][0]=1;
int sol=0;
for(int len=0;len<=b;len++)
{
for(int i=0;i<=n;i++)
{
for(int r=0;r<k;r++)
{
for(int cif=0;cif<=9;cif++)
{
if(prc[i][cif]!=0)
{
int x=0;
x+=dp[len][i][r];
x+=dp[len+1][prc[i][cif]][(r*10+cif)%k];
x%=MOD;
dp[len+1][prc[i][cif]][(r*10+cif)%k]=x;
}
}
}
if(len>=a)
{
sol+=dp[len][i][0];
sol%=MOD;
}
}
}
fout << sol;
return 0;
}