Pagini recente » Cod sursa (job #884719) | Cod sursa (job #679166) | Cod sursa (job #1789729) | Cod sursa (job #1727111) | Cod sursa (job #1404625)
#include <cstdio>
#include <ctype.h>
#include <cstring>
#define MOD 30103
FILE*f=fopen("diviz.in","r");
FILE*h=fopen("diviz.out","w");
int firstcif[10][201];
int dp[10][101][201],curent[101][201];
int k,a,b,sol,nr;
char n[201];
int main(){
fscanf(f,"%d%d%d\n%s",&k,&a,&b,&n);
while ( isdigit(n[nr]) ){
n[nr]-='0';
++nr;
}
for ( int i=0;i<nr;++i )
for ( int j=0;j<=9;++j )
firstcif[j][i]=-1;
//--nr;
for ( int i=0;i<nr;++i ){
if ( i!=0 ){
for ( int j=0;j<=9;++j )
firstcif[j][i]=firstcif[j][i-1];
firstcif[n[i-1]][i]=i-1;
}
//for ( int j=0;j<=9;++j )
// fprintf(h,"%d ",firstcif[i][j]);
//fprintf(h,"\n");
}
for ( int i=0;i<nr;++i ){
memset(curent,0,sizeof(curent));
for ( int j=0;j<=9;++j ){
if ( i!=0&&firstcif[j][i]>=firstcif[n[i]][i] )
for ( int l=0;l<k;++l )
for ( int p=1;p<b;++p ){
curent[(l*10+n[i])%k][p+1]+=dp[j][l][p];
curent[(l*10+n[i])%k][p+1]%=MOD;
}
}
if ( n[i]!=0 )
curent[n[i]%k][1]=1;
for ( int l=0;l<k;++l )
for ( int p=1;p<b;++p )
dp[n[i]][l][p]+=curent[l][p];
//dp[n[i]][n[i]%k][1]=1;
for ( int l=a;l<=b;++l ){
sol+=curent[0][l];
sol%=30103;
}
}
fprintf(h,"%d",sol);
return 0;
}