Pagini recente » Cod sursa (job #991606) | Cod sursa (job #2478746) | Istoria paginii runda/creare/clasament | Cod sursa (job #2003717) | Cod sursa (job #1774482)
#include <cstdio>
#define MAXN 200
#define MOD 30103
#define MAXCIF 10
#define MAXK 100
char v[MAXN+2];
int poz[MAXCIF][MAXN+1];
int dp[MAXN+2][2][MAXK];
int main(){
FILE*fi,*fout;
int k,a,b,n,i,j,p,cif,ans;
char ch;
fi=fopen("diviz.in" ,"r");
fout=fopen("diviz.out" ,"w");
fscanf(fi,"%d %d %d " ,&k,&a,&b);
ch=fgetc(fi);
n=0;
while(ch>='0'&&ch<='9'){
v[++n]=ch-'0';
ch=fgetc(fi);
}
for(i=0;i<MAXCIF;i++)
for(j=1;j<=n;j++){
if(poz[j-1][i]>=j)
poz[j][i]=poz[j-1][i];
else{
p=j;
while(p<=n&&v[p]!=i)
p++;
if(p>n)
p=0;
poz[j][i]=p;
}
}
ans=0;
for(i=1;i<MAXCIF;i++)
if(poz[1][i]>0){
dp[poz[1][i]][1][i%k]=1;
if(a==1&&i%k==0)
ans++;
}
for(j=1;j<b;j++){
for(i=1;i<=n;i++)
for(p=0;p<k;p++)
dp[i][1-j&1][p]=0;
for(i=j;i<n;i++)
for(p=0;p<k;p++)
for(cif=0;cif<MAXCIF;cif++)
if(poz[i+1][cif]>0){
dp[poz[i+1][cif]][1-j&1][(p*10+cif)%k]+=dp[i][j&1][p];
if(dp[poz[i+1][cif]][1-j&1][(p*10+cif)%k]>=MOD)
dp[poz[i+1][cif]][1-j&1][(p*10+cif)%k]-=MOD;
}
if(j+1>=a)
for(i=j+1;i<=n;i++){
ans+=dp[i][1-j&1][0];
if(ans>=MOD)
ans-=MOD;
}
}
fprintf(fout,"%d" ,ans);
fclose(fi);
fclose(fout);
return 0;
}