Cod sursa(job #1112027)

Utilizator thewildnathNathan Wildenberg thewildnath Data 19 februarie 2014 12:54:07
Problema Diviz Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<stdio.h>
#include<string.h>

#define NMAX 102
#define MOD 30103

int v[NMAX],f[12];
int n,k,a,b,sol;
int dp[2][NMAX][NMAX];

int main()
{
    freopen("diviz.in","r",stdin);
    freopen("diviz.out","w",stdout);
    int i,j,r,lin;
    char c;

    scanf("%d%d%d\n",&k,&a,&b);

    while(scanf("%c",&c)!=EOF)
        v[++n]=c-'0';
    --n;


    dp[1][1][v[1]%k]=1;
    lin=1;
    for(i=1;i<=n;++i)
    {
        memset(dp[1-lin],0,sizeof(dp[1-lin]));
        for(j=1;j<=i&&j<=b;++j)
        {
            for(r=0;r<k;++r)
            {
                dp[1-lin][j+1][(r*10+v[i])%k]=(dp[1-lin][j+1][(r*10+v[i])%k]+dp[lin][j][r])%MOD;
                dp[1-lin][j][r]=(dp[1-lin][j][r]+dp[lin][j][r])%MOD;

            }
        }
        lin=1-lin;
    }
    for(i=a;i<=b;++i)
        sol=(sol+dp[1-lin][i][0])%MOD;
    printf("%d\n",sol);

    return 0;
}