Cod sursa(job #1221571)

Utilizator pop_bogdanBogdan Pop pop_bogdan Data 20 august 2014 18:40:50
Problema Diviz Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <fstream>
#include <string>
using namespace std;

ifstream is("diviz.in");
ofstream os("diviz.out");

#define MOD 30103

int K,A,B,N,x;
int Ap[10][201], D[201][201][101];
string X,Nr;

int main()
{
    is >> K >> A >> B;
    Nr = "0";
    is >> X;
    Nr += X;
    N = X.length();

    for ( int i = 0; i <= N; ++i )
        for ( int j = i+1; j <= N; ++j )
        {
            x = Nr[j] - '0';
            if ( Ap[x][i+1] == 0)
                Ap[x][i+1] = j;
        }
    int Sol(0);
    for ( int i = 1; i <= 9; ++i )
    {
        if ( Ap[i][1] != 0 )
           D[1][Ap[i][1]][i%K] = 1;
    }

    for ( int i = 1; i <= B; ++i )
    {
        for ( int j = i; j <= N; ++j )
        {
            if ( i >= A )
                Sol += D[i][j][0];
            if ( Sol >= MOD )
                Sol %= MOD;
            for ( int k = 0; k <= K; ++k )
            {
                if ( D[i][j][k] != 0)
                for ( int p = 0; p <= 9; ++ p)
                {
                    if ( Ap[p][j+1] != 0)
                    {
                        D[i+1][Ap[p][j+1]][(k*10+p)%K] += D[i][j][k];
                        if ( D[i+1][Ap[p][j+1]][(k*10+p)%K] >= MOD)
                            D[i+1][Ap[p][j+1]][(k*10+p)%K] %= MOD;
                    }
                }

            }
        }
    }

    os << Sol;

    is.close();
    os.close();
}