Cod sursa(job #1698742)

Utilizator andreicoman299Coman Andrei andreicoman299 Data 5 mai 2016 11:15:18
Problema Diviz Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <stdio.h>
#include <stdlib.h>

#define MAXN 200
#define MAXK 100
#define MOD 30103

int d[2][1+MAXN+1][MAXK];
int main(){
    int k, a, b, i, j, l, r, rez;
    FILE*fi,*fo;
    fi=fopen("diviz.in","r");
    fo=fopen("diviz.out","w");
    fscanf(fi,"%d%d%d", &k, &a, &b);
    d[0][0][0]=1;
    fgetc(fi);
    i=1;
    char c=fgetc(fi);
    rez=0;
    while(c!='\n' && c!=EOF){
        c=c-'0';
        for(l=0;l<=b;l++)
            for(r=0;r<k;r++)
                d[1][l][r]=d[0][l][r];
        for(l=0;l<=b;l++){
            if(c!=0)
                d[1][l+1][c%k]=(d[1][l+1][c%k]+d[0][l][0])%MOD;
            for(r=1;r<k;r++)
                d[1][l+1][(r*10+c%k)%k]=(d[1][l+1][(r*10+c%k)%k]+d[0][l][r])%MOD;
        }
        for(l=0;l<=b;l++){
            for(r=0;r<k;r++){
                d[0][l][r]=d[1][l][r];
                d[1][l][r]=0;
            }
        }
        i++;
        c=fgetc(fi);
    }
    rez=0;
    for(i=a;i<=b;i++)
        rez=(rez+d[0][i][0])%MOD;
    fprintf(fo,"%d", rez);
    fclose(fi);
    fclose(fo);
    return 0;
}