Pagini recente » Atasamentele paginii Clasament oji_9 | Cod sursa (job #1998486) | Cod sursa (job #2720502) | Cod sursa (job #1048880) | Cod sursa (job #1774757)
#include <cstdio>
#include <cstring>
#define MAXN 200
#define MOD 30103
#define MAXCIF 10
#define MAXK 100
char v[MAXN+2];
int poz[MAXN+1][MAXCIF];
int dp[2][MAXN+2][MAXK];
int main(){
FILE*fi,*fout;
int k,a,b,n,i,j,p,cif,ans,r,x;
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[1][poz[1][i]][i%k]=1;
if(a==1&&i%k==0)
ans++;
}
for(j=1;j<b;j++){
memset(dp[1-j&1],0,sizeof(dp[1-j&1]));
for(i=j;i<n;i++)
for(p=0;p<k;p++)
if(dp[j&1][i][p]>0)
for(cif=0;cif<MAXCIF;cif++){
x=poz[i+1][cif];
if(x>0){
r=(p*10+cif)%k;
dp[1-j&1][x][r]+=dp[j&1][i][p];
if(dp[1-j&1][x][r]>=MOD)
dp[1-j&1][x][r]-=MOD;
}
}
if(j+1>=a)
for(i=j+1;i<=n;i++){
ans+=dp[1-j&1][i][0];
if(ans>=MOD)
ans-=MOD;
}
}
fprintf(fout,"%d" ,ans);
fclose(fi);
fclose(fout);
return 0;
}