Cod sursa(job #1062196)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 20 decembrie 2013 20:27:55
Problema Diviz Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream>

using namespace std;

int ultim[15],A,B,K,a[205],N,first[15][205],dp[205][205][105],sol;

inline void Read()
{
    int i,j,cif;
    char sir[205];
    ifstream fin("diviz.in");
    fin>>K>>A>>B>>sir;
    for(i=0;sir[i];++i)
        a[++N]=sir[i]-'0';
    fin.close();
    for(i=1;i<=N;++i)
    {
        cif=a[i];
        for(j=ultim[cif];j<i;++j)
            first[cif][j]=i;
        ultim[cif]=i;
    }
}

inline void Solve()
{
    int i,j,cif,rest;
    for(cif=1;cif<10;++cif)
        if(first[cif][0])
            dp[first[cif][0]][1][cif%K]=1;
    for(i=1;i<=N;++i)
        for(j=1;j<N;++j)
            for(rest=0;rest<K;++rest)
                for(cif=0;cif<10;++cif)
                    if(first[cif][i])
                    {
                        dp[first[cif][i]][j+1][(rest*10+cif)%K]+=dp[i][j][rest];
                        if(j+1>=A && j+1<=B && (rest*10+cif)%K==0)
                            sol=(sol+dp[i][j][rest])%30103;
                    }
    ofstream fout("diviz.out");
    fout<<sol<<"\n";/// 30103 !!!!!!!!!!!!
    fout.close();
}

int main()
{
    Read();
    Solve();
    return 0;
}