Cod sursa(job #1141737)

Utilizator Kira96Denis Mita Kira96 Data 13 martie 2014 09:07:20
Problema Diviz Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include<fstream>
#include<cstring>
#define mod 30103
#define N 210
using namespace std;
ifstream f("diviz.in");
ofstream g("diviz.out");
int D[N][N][N/2],fc[N][N],k,t,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;
    }
    for(i=1;i<=n;++i)
    {
        for(j=1;j<b;++j)
        for(r=0;r<k;++r)
        for(cif=0;cif<=9;++cif)
        {
            D[j+1][fc[cif][i+1]][(r*10+cif)%k]+=D[j][i][r];
            if(D[j+1][fc[cif][i+1]][(r*10+cif)%k]>=mod)
            D[j+1][fc[cif][i+1]][(r*10+cif)%k]-=mod;
        }
    }
    for(j=1;j<=n;++j)
    for(i=a;i<=b;++i)
    {
        sol+=D[i][j][0];
        if(sol>=mod)
        sol-=mod;
    }
    g<<sol;
    return 0;
}