Pagini recente » Cod sursa (job #2781094) | Cod sursa (job #1419320) | Cod sursa (job #3135705) | Cod sursa (job #1702365) | Cod sursa (job #1062205)
#include <fstream>
using namespace std;
short ultim[15],A,B,K,a[205],N,first[10][205],dp[205][205][102],sol;
inline void Read()
{
int i,j,cif;
char sir[205];
ifstream fin("diviz.in");
fin>>K>>A>>B>>sir;
for(i=0;sir[i];++i)
a[++N]=sir[i]-'0';
fin.close();
for(i=1;i<=N;++i)
{
cif=a[i];
for(j=ultim[cif];j<i;++j)
first[cif][j]=i;
ultim[cif]=i;
}
}
inline void Solve()
{
int i,j,cif,rest;
for(cif=1;cif<10;++cif)
if(first[cif][0])
dp[first[cif][0]][1][cif%K]=1;
for(i=1;i<=N;++i)
for(j=1;j<N;++j)
for(rest=0;rest<K;++rest)
for(cif=0;cif<10;++cif)
if(first[cif][i])
{
dp[first[cif][i]][j+1][(rest*10+cif)%K]+=dp[i][j][rest];
if(dp[first[cif][i]][j+1][(rest*10+cif)%K]>30103)
dp[first[cif][i]][j+1][(rest*10+cif)%K]-=30103;
if(j+1>=A && j+1<=B && (rest*10+cif)%K==0)
{
sol=(sol+dp[i][j][rest]);
if(sol>30103)
sol-=30103;
}
}
ofstream fout("diviz.out");
fout<<sol<<"\n";
fout.close();
}
int main()
{
Read();
Solve();
return 0;
}