Cod sursa(job #236269)

Utilizator Mishu91Andrei Misarca Mishu91 Data 27 decembrie 2008 01:00:51
Problema Diviz Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <cstdio>
#include <cstring>

#define MAX_N 25
#define MAX_K 15
#define MOD 30103

int K, A, B, N;
char S[MAX_N];
int V[MAX_N];
int T[MAX_N][MAX_N][MAX_K];

void citire()
{
    scanf("%d %d %d\n",&K, &A, &B);
    fgets(S, MAX_N, stdin);
    N = strlen(S) - 1;
    for(int i = 1; i <= N; ++i)
        V[i] = S[i-1] - '0';
}

void solve()
{
    int q = 0;
    for(int i = 1; i <= N; ++i)
        T[1][i][(V[i] % K)] = 1;

    for(int k = 1; k <= B; ++k)
        for(int i = 1; i <= N; ++i)
        {
            if(V[i] == V[i-1])
                q = i-1;
            else
                q = 1;
            for(int j = q; j < i; ++j)
                for(int t = 0; t < K; ++t)
                    T[k][i][(V[i] + t*10) % K] += T[k-1][j][t],
                    T[k][i][(V[i] + t*10) % K] %= MOD;
        }
    int Rez = 0;
    
    for(int k = A; k <= B; ++k)
        for(int i = 1; i <= N; ++i)
                Rez += T[k][i][0],
                Rez %= MOD;
    printf("%d\n",Rez);
}

int main()
{
    freopen("diviz.in","rt",stdin);
    freopen("diviz.out","wt",stdout);

    citire();
    solve();
}