Cod sursa(job #478723)

Utilizator freak93Adrian Budau freak93 Data 20 august 2010 07:20:49
Problema Diviz Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<cstdio>
#include<cstring>

using namespace std;

const char iname[]="diviz.in";
const char oname[]="diviz.out";
const int mod=30103;
const int maxn=205;
const int maxk=105;

int dp[12][maxn][maxk],n,i,j,p,c,rez,k,been[maxn],a,b,aux[maxn][maxk];
char s[maxn];

int main()
{
    freopen(iname,"r",stdin);
    freopen(oname,"w",stdout);
    scanf("%d%d%d\n",&k,&a,&b);
    fgets(s,sizeof(s),stdin);
    for(n=0;s[n]&&s[n]!='\n';++n)
        s[n]-='0';
    for(i=0;i<n;++i)
    {
        memset(aux,0,sizeof(aux));
        if(s[i])
            aux[1][s[i]%k]=1;
        for(j=1;j<=i;++j)
            for(p=0;p<k;++p)
                for(c=0;c<10;++c)
                {
                    int w=(p*10+s[i])%k;
                    aux[j+1][w]+=dp[c][j][p];
                    if(aux[j+1][w]>=mod)
                        aux[j+1][w]-=mod;
                }
        memcpy(dp[s[i]],aux,sizeof(aux));
    }
    for(i=a;i<=b;++i)
        for(j=0;j<10;++j)
            rez=(rez+dp[j][i][0])%mod;
    printf("%d\n",rez);
}