Cod sursa(job #1141740)

Utilizator Kira96Denis Mita Kira96 Data 13 martie 2014 09:13:38
Problema Diviz Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<fstream>
#include<cstring>
#define mod 30103
#define N 210
using namespace std;
ifstream f("diviz.in");
ofstream g("diviz.out");
int D[2][N][N/2],fc[N][N],k,t,p,nr,np,cif,a,b,i,sol,met[N],j,n,r;
char s[N];
int main ()
{
    f>>k>>a>>b;
    f>>(s+1);
    n=strlen(s+1);
    for(i=1;i<=n;++i)
    for(j=0;j<=9;++j)
    for(t=i;t<=n;++t)
    if(s[t]==j+'0')
    {
    fc[j][i]=t;
    break;
    }
    for(i=1;i<=n;++i)
    if(!met[s[i]]&&(s[i]!='0'))
    {
        met[s[i]]=1;
        D[1][i][(s[i]-'0')%k]=1;
    }
    p=1;
    for(j=1;j<b;++j)
    {
        p=1-p;
        for(i=1;i<=n;++i)
        memset(D[p][i],0,sizeof(D[p][i]));
    for(i=1;i<=n;++i)
    {
        for(r=0;r<k;++r)
        for(cif=0;cif<=9;++cif)
        {
            np=fc[cif][i+1];
            nr=(r*10+cif)%k;
            D[p][np][nr]+=D[1-p][i][r];
            if(D[p][np][nr]>=mod)
            D[p][np][nr]-=mod;
        }
    }
    if(j+1>=a)
    for(i=1;i<=n;++i)
    {
        sol+=D[p][i][0];
        if(sol>=mod)
        sol-=mod;
    }
    }

    g<<sol;
    return 0;
}