Pagini recente » Cod sursa (job #2290045) | Monitorul de evaluare | Istoria paginii utilizator/ionvladescu | Cod sursa (job #1691748) | Cod sursa (job #1774450)
#include <cstdio>
#define MAXN 200
#define MOD 30103
#define MAXCIF 10
#define MAXK 100
char v[MAXN+1];
int poz[MAXCIF][MAXN+1];
int dp[MAXN+2][MAXN+1][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++;
poz[j][i]=p;
}
}
for(i=0;i<MAXCIF;i++)
dp[poz[1][i]][1][i%k]=1;
for(i=1;i<n;i++)
for(j=1;j<b&&j<=i;j++)
for(p=0;p<k;p++)
for(cif=0;cif<MAXCIF;cif++){
dp[poz[i+1][cif]][j+1][(p*10+v[poz[i+1][cif]])%k]+=dp[i][j][p];
if(dp[poz[i+1][cif]][j+1][(p*10+v[poz[i+1][cif]])%k]>=MOD)
dp[poz[i+1][cif]][j+1][(p*10+v[poz[i+1][cif]])%k]-=MOD;
}
ans=0;
for(j=1;j<=n;j++)
for(i=a;i<=b;i++){
ans+=dp[j][i][0];
if(ans>=MOD)
ans-=MOD;
}
fprintf(fout,"%d" ,ans);
fclose(fi);
fclose(fout);
return 0;
}