Pagini recente » Cod sursa (job #486823) | Cod sursa (job #2555272) | Profil YamasFurniture | Cod sursa (job #1461198) | Cod sursa (job #267493)
Cod sursa(job #267493)
#include<stdio.h>
#define MOD 30103
#define nmax 222
#include<algorithm>
using namespace std;
int q,viz[nmax],n,x,poz[nmax][nmax],c[nmax],k,i,ii,j,l,b[nmax][111],a[nmax][111],sol,B,A;
int main(){
FILE *f = fopen("diviz.in","r");
FILE *g = fopen("diviz.out","w");
fscanf(f,"%d %d %d\n",&k,&A,&B);
fscanf(f,"%c",&x);
while(!feof(f) && x!='\n'){
c[++n] = x - '0';
fscanf(f,"%c",&x);
}
for(i=1; i<=n; i++)
if(c[i] && !viz[c[i]] ){
a[i][c[i] % k] = 1;
viz[c[i]] = 1;
if( A<=i && i <=B && c[i] % k == 0)
sol+=1;
}
sol%=MOD;
for(i=n; i>=1; i--){
for(j=0; j<=9; j++){
if(poz[j][i+1] && !poz[j][i])
poz[j][i] = poz[j][i+1];
}
poz[c[i]][i-1] = i;
}
for(l=2; l<=B; l++){
for(i=1; i<=n; i++)
for(j=0; j<k; j++)
for(ii=0; ii<=9 && a[i][j]; ii++)
if(poz[ii][i]){
q = (j*10 + ii) % k;
b[ poz[ii][i] ][ q ]+=a[i][j];
if(b[ poz[ii][i] ][ q ] >= MOD)
b[ poz[ii][i] ][ q ]-=MOD;
}
if(A <= l && l <= B){
for(i=1; i<=n; i++){
sol+=b[i][0];
if(sol >= MOD)
sol-=MOD;
}
}
for(i=0; i<=n; i++){
memcpy(a[i], b[i], sizeof(a[i]));
memset(b[i], 0, sizeof(b[i]));
}
}
fprintf(g,"%d",sol);
fclose(f);
fclose(g);
return 0;
}