Cod sursa(job #1141408)

Utilizator andrei_diaconuAndrei Diaconu andrei_diaconu Data 12 martie 2014 21:01:49
Problema Diviz Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <fstream>
#include <string.h>
#define modulo 30103
using namespace std;
ifstream f("diviz.in");
ofstream g("diviz.out");
char c;
int cif[202][10], i, j, n, a[202][101], b[202][101], k, nr[202], l, p, a1, b1, s;
int main()
{
    f>>k>>a1>>b1;
    while (f>>c)
        nr[++n]=c-'0';
    for (i=n-1; i>=0; i--) {
        memcpy(cif[i], cif[i+1], sizeof(cif[i+1]));
        cif[i][nr[i+1]]=i+1;
    }
    for(i=1; i<=9; i++)
        if(cif[0][i]!=0)
            a[ cif[0][i] ][ i%k ]++;
    
    for (l=2; l<=b1; l++) {
        memset(b, 0, sizeof(b));
        for(i=1; i<=n; i++)
            for(j=0; j<=k-1; j++)
                if(a[i][j]!=0)
                    for(p=0; p<=9; p++)
                        if(cif[i][p]!=0)
                            b[ cif[i][p] ][ (j*10+p)%k ]=(b[ cif[i][p] ][ (j*10+p)%k ]+a[i][j])%modulo;
        if(l>=a1)
            for(i=0; i<=n; i++)
                s=(s+b[i][0])%modulo;
        memcpy(a, b, sizeof(b));
    }
    g<<s;
    return 0;
}