Pagini recente » Cod sursa (job #1896718) | Cod sursa (job #2478088) | Cod sursa (job #624080) | Cod sursa (job #596187) | Cod sursa (job #1741274)
#include<cstdio>
#include<cstring>
#define MOD 30103
#define MAXN 210
#define DIGITS 12
using namespace std;
char s[MAXN];
int first[DIGITS][MAXN],dp[2][MAXN][MAXN];
int main(){
freopen("diviz.in","r",stdin);
freopen("diviz.out","w",stdout);
int k,a,b,n,i,j,l,m,p=1,q=0,answer=0;
scanf("%d%d%d\n%s",&k,&a,&b,s+1);
n=strlen(s+1);
for(i=n;i>=1;i--)
for(j=0;j<=9;j++)
if(j==s[i]-'0')
first[j][i]=i;
else
first[j][i]=first[j][i+1];
for(i=1;i<=9;i++)
dp[1][first[i][1]][i%k]=1;
for(i=1;i<=b;i++){
p^=1;
q^=1;
memset(dp[p],0,sizeof(dp[p]));
for(j=i;j<=n;j++){
if(i>=a){
answer+=dp[q][j][0];
if(answer>=MOD)
answer-=MOD;
}
for(l=0;l<k;l++)
if(dp[q][j][l]!=0)
for(m=0;m<=9;m++)
if(first[m][j+1]!=0)
dp[p][first[m][j+1]][(l*10+m)%k]=(dp[p][first[m][j+1]][(l*10+m)%k]+dp[q][j][l])%MOD;
}
}
printf("%d",answer);
return 0;
}