Pagini recente » Cod sursa (job #2050227) | Cod sursa (job #1937980) | Cod sursa (job #1785608) | Cod sursa (job #2259526) | Cod sursa (job #1062208)
#include <fstream>
using namespace std;
short ultim[15],A,B,K,a[205],N,first[10][205],dp[205][205][102],sol,r[102][12];
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=N;i>0;--i)
for(j=9;j>=0;--j)
if(a[i]==j)
first[j][i-1]=i;
else
first[j][i-1]=first[j][i];
for(i=0;i<K;++i)
for(j=0;j<10;++j)
r[i][j]=(i*10+j)%K;
}
inline void Solve()
{
int i,j,cif,rest;
for(cif=1;cif<10;++cif)
dp[first[cif][0]][1][cif%K]=1;
for(i=1;i<=N;++i)
for(j=1;j<=i && 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][r[rest][cif]]+=dp[i][j][rest];
if(dp[first[cif][i]][j+1][r[rest][cif]]>30103)
dp[first[cif][i]][j+1][r[rest][cif]]-=30103;
if(j+1>=A && j+1<=B && r[rest][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;
}