Pagini recente » Cod sursa (job #1492446) | Istoria paginii runda/cnrv_3 | Cod sursa (job #965506) | Istoria paginii runda/testeu/clasament | Cod sursa (job #1359332)
#include <fstream>
#include <cstring>
#define DIM 205
#define MOD 30103
using namespace std;
int K,A,B,N;
char s[DIM];
int D1[DIM][DIM],l[DIM][DIM][10],v[DIM],D2[DIM][DIM],sol;
ifstream fin("diviz.in");
ofstream fout("diviz.out");
int main(){
fin>>K>>A>>B>>s+1;
for(int i=1;s[i]!=0;i++)
v[++N]=s[i]-'0';
D1[0][0]=D2[0][0]=1;
for(int i=1;i<=N;i++){
for(int j=1;j<=i;j++)
for(int d=0;d<K;d++){
if(v[i]==0 && j==1)
continue;
D2[j][d]-=l[j][d][v[i]];
if(D2[j][d]<0)
D2[j][d]+=MOD;
l[j][d][v[i]]=0;
}
for(int j=1;j<=i;j++){
if(v[i]==0 && j==1)
continue;
for(int d=0;d<K;d++){
D2[j][(d*10+v[i])%K]=(D2[j][(d*10+v[i])%K]+D1[j-1][d])%MOD;
l[j][(d*10+v[i])%K][v[i]]=(l[j][(d*10+v[i])%K][v[i]]+D1[j-1][d])%MOD;
}
}
memcpy(D1,D2,sizeof(D2));
}
for(int i=A;i<=B;i++)
sol=(sol+D1[i][0])%MOD;
fout<<sol<<"\n";
fin.close();fout.close();
return 0;
}