Cod sursa(job #2835905)

Utilizator puica2018Puica Andrei puica2018 Data 19 ianuarie 2022 12:37:00
Problema Diviz Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("diviz.in");
ofstream fout("diviz.out");

const int mod=30103;

int n,k,a,b;
string s;

int f[10][205],dp[2][205][105];

int main()
{
    fin>>k>>a>>b>>s;
    n=s.size();
    for(int c=0; c<10; c++)
        f[c][n]=n;
    for(int i=n-1; i>=0; i--)
    {
        for(int c=0; c<10; c++)
        {
            if(c==s[i]-'0')
                f[c][i]=i;
            else
                f[c][i]=f[c][i+1];
        }
    }
    for(int c=1; c<10; c++)
        dp[1][f[c][0]][c%k]=1;
    int ind=1,sum=0;
    for(int lg=1; lg<=b; lg++,ind^=1)
    {
        for(int i=0; i<n; i++)
        {
            for(int r=0; r<k; r++)
            {
                if(lg>=a && r==0)
                    sum=(sum+dp[ind][i][r])%mod;
                for(int c=0; c<10; c++)
                    dp[ind^1][f[c][i+1]][(r*10+c)%k]=(dp[ind^1][f[c][i+1]][(r*10+c)%k]+dp[ind][i][r])%mod;
                dp[ind][i][r]=0;
            }
        }
    }
    fout<<sum<<"\n";
    return 0;
}