Pagini recente » Cod sursa (job #2182531) | Cod sursa (job #930802) | Cod sursa (job #678583) | Cod sursa (job #668645) | Cod sursa (job #45482)
Cod sursa(job #45482)
#include <stdio.h>
#include <string.h>
#define maxN 210
#define maxK 110
#define cmod 30103
int n,k,a,b, res, vmk[maxN],kkk[maxN];
char vec[maxN];
int din[maxN][maxK],pls[maxN][maxK], dinc[10][maxN][maxK];
void modk(int&x){while(x>=k)x-=k;}
void stab(int&x){while(x>=cmod)x-=cmod;while(x<0)x+=cmod;}
void inputFunc(){
FILE*fi=fopen("diviz.in","r");
fscanf(fi,"%d %d %d %s",&k,&a,&b,vec);
for(n=0;vec[n];n++){
vec[n]-='0';vmk[n]=vec[n];modk(vmk[n]);
}
for(int i=0;i<k;i++)kkk[i]=i*10,modk(kkk[i]);
fclose(fi);
}
void outputFunc(){
FILE*fi=fopen("diviz.out","w");
fprintf(fi,"%d",res%cmod);
fclose(fi);
}
int main(){
inputFunc();
din[0][0]=1;
for(int i=0;i<n;i++){
memset(pls,0,sizeof pls);
int t=0;if(!vec[i])t=1;
for(int j=i+1;j>t;j--){
for(int l=0;l<k;l++)if(din[j-1][l]){
int d;
d=kkk[l]+vmk[i];modk(d);
din[j][d]+=din[j-1][l];stab(din[j][d]);
pls[j][d]+=din[j-1][l];stab(pls[j][d]);
}
}
for(int j=0;j<n;j++)for(int l=0;l<k;l++){
din[j][l]-=dinc[vec[i]][j][l];stab(din[j][l]);
pls[j][l]-=dinc[vec[i]][j][l];stab(pls[j][l]);
dinc[vec[i]][j][l]+=pls[j][l];stab(dinc[vec[i]][j][l]);
}
}
for(int i=a;i<=b;i++)res+=din[i][0];
outputFunc();
return 0;
}