Cod sursa(job #1359739)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 25 februarie 2015 01:32:22
Problema Diviz Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include<cstdio>
#include<cstring>
#define MOD 30103
int k,a,b,l,n,i,j,ii,ok,s,v[220],x[220][220][12],vd[220][220],xd[220][220];
char ss[220];
FILE *f,*g;
int main(){
    f=fopen("diviz.in","r");
    g=fopen("diviz.out","w");
    fscanf(f,"%d%d%d%s",&k,&a,&b,ss);
    n=strlen(ss);
    for(i=0;i<n;i++){
        v[i+1]=ss[i]-'0';
    }
    vd[0][0]=xd[0][0]=1;
    for(i=1;i<=n;i++){
        for(j=1;j<=i;j++){
            if( v[i] || j!=1 ){
                for(ii=0;ii<k;ii++){
                    xd[j][ii]-=x[j][ii][ v[i] ];
                    if(xd[j][ii]<0)
                        xd[j][ii]+=MOD;
                    x[j][ii][ v[i] ]=0;
                }
            }
        }
        for(j=1;j<=i;j++){
            if( v[i] || j!=1 ){
                for(ii=0;ii<k;ii++){
                    xd[j][ ( ii * 10 + v[i] ) % k ] = ( xd[j][ ( ii * 10 + v[i] ) % k ] + vd[j-1][ii] )%MOD;
                    x[j][ ( ii * 10 + v[i] ) % k ][ v[i] ] = ( x[j][ ( ii * 10 + v[i] ) % k ][ v[i] ] + vd[j-1][ii] ) %MOD;
                }
            }
        }
        for(j=1;j<=n;j++){
            for(ii=0;ii<k;ii++){
                vd[j][ii]=xd[j][ii];
            }
        }
    }
    for(i=a;i<=b;i++){
        s=( s + xd[i][0] ) % MOD;
    }
    fprintf(g,"%d",s);
    fclose(f);
    fclose(g);
    return 0;
}