Cod sursa(job #1141741)

Utilizator Kira96Denis Mita Kira96 Data 13 martie 2014 09:17:17
Problema Diviz Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include<fstream>
#include<cstring>
#define mod 30103
#define N 210
using namespace std;
ifstream f("diviz.in");
ofstream g("diviz.out");
int fc[N][N],k,t,p,nr,np,cif,a,b,i,sol,met[N],j,n,r;
int D[2][N][N/2];
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];
        }
    }

    for(r=0;r<k;++r)
    for(i=1;i<=n;++i)
    D[p][i][r]%=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;
}