Pagini recente » Cod sursa (job #2786484) | Cod sursa (job #2783351) | Cod sursa (job #226833) | Cod sursa (job #2419617) | Cod sursa (job #858021)
Cod sursa(job #858021)
#include <iostream>
#include <fstream>
#include <cstring>
#define MOD 30103
using namespace std;
int K,a,b,n;
int sol[2][210][110],aux[10];
char C[210];
int main()
{
freopen ("diviz.in","r",stdin);
freopen ("diviz.out","w",stdout);
scanf("%d%d%d%s",&K,&a,&b,C);
int l=strlen(C);
for(int i=1,act=0;i<=l;i++,act=!act)
{
memset(sol[act],0,sizeof(sol[act]));
for(int j=1;j<=l;j++)
{
if(i==1 && (C[j-1]-'0')!=0)
sol[act][j][(C[j-1]-'0')%K]=1;
for(int k=0;k<K;k++)
{
sol[act][j][(k*10+C[j-1]-'0')%K]+=sol[!act][j-1][k];
if(sol[act][j][(k*10+C[j-1]-'0')%K]>=MOD)
sol[act][j][(k*10+C[j-1]-'0')%K]-=MOD;
}
}
for(int k=0;k<K;k++)
{
memset(aux,0,sizeof(aux));
for(int j=1;j<=l;j++)
{
sol[act][j][k]-=aux[C[j-1]-'0'];
aux[C[j-1]-'0']+=sol[act][j][k];
sol[act][j][k]+=sol[act][j-1][k];
while (sol[act][j][k] >= MOD) sol[act][j][k] -= MOD;
}
}
if (i>=a && i<=b)
{
n+=sol[act][l][0];
if (n>=MOD) n-=MOD;
}
}
printf("%d",n);
return 0;
}