Pagini recente » Cod sursa (job #546787) | Cod sursa (job #552528) | Cod sursa (job #2244045) | Cod sursa (job #773404) | Cod sursa (job #516258)
Cod sursa(job #516258)
#include<cstdio>
#include<cstring>
#define MOD 30103
int n,K,A,B,next[1<<8][10],d[1<<8][1<<8][1<<7];
void copy(int a[10],int b[10])
{
for(int i=0;i<10;i++)
a[i]=b[i];
}
void init()
{
char s[1<<8];
gets(s);
n=strlen(s)-1;
for(int j=0;j<10;j++)
next[n+1][j]=n+1;
for(int i=n;i>=0;i--)
{
copy(next[i],next[i+1]);
next[i][s[i]-'0']=i;
}
}
void solve()
{
for(int c=1;c<=9;c++)
if(next[0][c]!=n+1)
d[1][next[0][c]][c%K]=1;
for(int l=1;l<=B;l++)
for(int p=0;p<=n;p++)
for(int r=0;r<K;r++)
if(d[l][p][r])
for(int c=0;c<=9;c++)
if(next[p+1][c]!=n+1)
{
d[l+1][next[p+1][c]][(r*10+c)%K]+=d[l][p][r];
if(d[l+1][next[p+1][c]][(r*10+c)%K]>=MOD)
d[l+1][next[p+1][c]][(r*10+c)%K]-=MOD;
}
}
void afis()
{
int rez=0;
for(int l=A;l<=B;l++)
for(int p=0;p<=n;p++)
{
rez+=d[l][p][0];
if(rez>=MOD)
rez-=MOD;
}
printf("%d\n",rez);
}
int main()
{
freopen("diviz.in","r",stdin);
freopen("diviz.out","w",stdout);
scanf("%d%d%d\n",&K,&A,&B);
init();
solve();
afis();
return 0;
}