Cod sursa(job #1768773)

Utilizator topala.andreiTopala Andrei topala.andrei Data 1 octombrie 2016 14:00:42
Problema Diviz Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("diviz.in");
ofstream g("diviz.out");
const int maxn=205;
const int MOD=30103;
int K,A,B,N,sol;
int c[maxn][maxn][101],next[11][maxn];
char s[201];
int main()
{
    int i,j,v[201];
    f>>K>>A>>B;
    f>>(s+1);
    N=strlen(s+1);
    for (i=1;i<=N;i++)
        v[i]=s[i]-'0';

    for (i=0;i<=9;i++)
        for (j=N;j>=1;j--)
        {
            if (v[j]==i)
                next[i][j]=j;
            else next[i][j]=next[i][j+1];
        }
    for (i=0;i<=9;i++)
        c[1][next[i][1]][i%K]=1;

    for (i=1;i<=B;i++)
        for (j=i;j<=B;j++)
        {
            for (int k=0;k<K;k++)
            {
                if (c[i][j][k]==0) continue;
                for (int p=0;p<=9;p++)
                    if (next[p][j+1]!=0)
                        c[i+1][next[p][j+1]][(k*10+p)%K]=(c[i+1][next[p][j+1]][(k*10+p)%K]+c[i][j][k])%MOD;
            }
            if (i>=A)
                if (c[i][j][0]!=0)
                    sol=(sol+c[i][j][0])%MOD;
        }
    g<<sol;
}