Cod sursa(job #2988176)

Utilizator Theo14Ancuta Theodor Theo14 Data 3 martie 2023 18:51:13
Problema Diviz Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include<bits/stdc++.h>
#define int long long
#define MOD 30103
using namespace std;
ifstream f("diviz.in");
ofstream g("diviz.out");

int dp[205][205][102],first[11][205];//dp[i][j][l]=numarul de subsiruri distincte care au ultima cifra cea de a i a cifra din s de lungime j si restul modulo k egal cu l
//sol=dp[i][l][0]+dp[i][l+1][0]+..dp[i][r][0]

char s[205];

signed main()
{
    int k,a,b,i,n,j,l,r;
    f>>k>>a>>b;
    f>>(s+1);
    n=strlen(s+1);
    for(i=0;i<n;i++)
        for(j=i+1;j<=n;j++)
            if(first[s[j]-'0'][i]==0)
                first[s[j]-'0'][i]=j;
    for(i=1;i<=9;i++)
        dp[first[i][0]][1][i%k]=1;
    for(l=1;l<=b;l++)
    {
        for(i=l;i<=n;i++)
        {
            for(r=0;r<k;r++)
            {
                for(j=0;j<=9;j++)
                    if(first[j][i]!=0)
                        dp[first[j][i]][l+1][(r*10+j)%k]=(dp[first[j][i]][l+1][(r*10+j)%k]+dp[i][l][r])%MOD;
            }
        }
    }
    int sol=0;
    for(i=1;i<=n;i++)
    for(l=a;l<=b;l++)
    {
        sol=(sol+dp[i][l][0])%MOD;
    }
    g<<sol;
    return 0;
}