Cod sursa(job #7275)

Utilizator victorsbVictor Rusu victorsb Data 21 ianuarie 2007 13:17:40
Problema Diviz Scor 100
Compilator cpp Status done
Runda preONI 2007, Runda 1, Clasele 11-12 Marime 1.29 kb
#include <cstdio>
#include <string.h>
#define Nmax 256
#define Kmax 128

const int modul = 30103;
int n, k, a, b, i, j, cf, pas, c, sol, t;
int sir[Nmax];
char s[Nmax];
int d[Nmax][Kmax][10];

void citire()
{
    scanf("%d %d %d\n", &k, &a, &b);
    scanf("%s\n", s);
    //printf("%s\n", s);
    n = strlen(s);
    for (i=0; i<n; ++i)
        sir[i+1] = s[i] - '0';
}

void solve()
{
    for (pas=1; pas<=n; ++pas)
    {
        cf = sir[pas];
        for (i=n-1; i>0; --i)
        {
            for (j=0; j<k; ++j)
                d[i+1][j][cf] = 0;
            for (j=0; j<k; ++j)
            {
                t = (j * 10 + cf) % k;
                for (c=0; c<=9; ++c)
                {
                    d[i+1][t][cf] += d[i][j][c];
                    if (d[i+1][t][cf] >= modul)
                        d[i+1][t][cf] -= modul;
                }
            }
        }
        if (cf)
            d[1][cf % k][cf] = 1;
    }
    for (i=a; i<=b; ++i)
        for (j=0; j<10; ++j)
        {
            sol += d[i][0][j];
            if (sol >= modul)
                sol -= modul;
        }
    printf("%d\n", sol);
}

int main()
{
    freopen("diviz.in","r",stdin);
    freopen("diviz.out","w",stdout);
    citire();
    solve();
    return 0;
}