Cod sursa(job #1769041)

Utilizator topala.andreiTopala Andrei topala.andrei Data 1 octombrie 2016 20:50:08
Problema Diviz Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 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][102],v[maxn],urm[12][maxn];
char s[maxn];
int main()
{
    int i,j;
    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)
                urm[i][j]=j;
            else urm[i][j]=urm[i][j+1];
        }
    for (i=1;i<=9;i++)
        c[1][urm[i][1]][i%K]=1;

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