Cod sursa(job #2018758)

Utilizator ionanghelinaIonut Anghelina ionanghelina Data 5 septembrie 2017 21:25:40
Problema Diviz Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<bits/stdc++.h>
#define maxN 205
#define maxK 105
#define mod 30103
using namespace std;
char s[maxN];
int v[maxN],n,lst[15],sol;
int k,a,b,dp[2][maxN][maxK];
int main()
{
    freopen("diviz.in","r",stdin);
    freopen("diviz.out","w",stdout);
    scanf("%d%d%d",&k,&a,&b);
    scanf("\n");
    scanf("%s",s+1);
    n=strlen(s+1);
    for(int i=1;i<=n;i++)
    {
        v[i]=s[i]-'0';
        lst[v[i]]=i;
    }


    dp[0][0][0]=1;


    for(int i=0;i<n;i++)
    {
        dp[0][0][0]=1;
        for(int j=0;j<=i;j++)

            for(int r=0;r<k;r++)

            {

                if(j || v[i+1]) dp[1][j+1][(r*10+v[i+1])%k]=(dp[1][j+1][(r*10+v[i+1])%k]+dp[0][j][r])%mod;

            }
        for(int cif=0;cif<=9;cif++)
        {

            if(lst[cif]==i+1)
            {
                for(int j=a;j<=b;j++)
                    sol=(sol+dp[1][j][0])%mod;
            }

        }

        for(int j=1;j<=i+1;j++)
            for(int r=0;r<k;r++)
                dp[0][j][r]=(dp[0][j][r]+dp[1][j][r])%mod;
        memset(dp[1],0,sizeof(dp[1]));
    }

    printf("%d\n",sol);

    return 0;
}