Cod sursa(job #2984959)

Utilizator BalasaRaduBalasa Radu BalasaRadu Data 25 februarie 2023 12:18:52
Problema Diviz Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <bits/stdc++.h>
#define int long long
using namespace std;

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

const int dim=209,mod=30103;


char s[dim];
int n,a,b,k,c[dim];
int nxt[dim][10];
int dp[dim][dim][dim];//dp[len][i][rest]

signed main(){
    fin>>k>>a>>b;
    fin>>(s+1);
    n=strlen(s+1);
    for(int i=1;i<=n;i++){
        c[i]=s[i]-'0';
    }
    for(int i=1;i<=n;i++){
        if(c[i]!=0){
            dp[1][i][c[i]%k]=1;
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++){
            if(!nxt[i][c[j]]){
                nxt[i][c[j]]=j;
            }
        }
    }
    for(int len=1;len<=b;len++){
        for(int i=len;i<n;i++){
            for(int r=0;r<k;r++){
                for(int j=0;j<=9;j++){
                    if(nxt[i][j]){
                        dp[len+1][nxt[i][j]][(r*10+j)%k]+=dp[len][i][r];
                        dp[len+1][nxt[i][j]][(r*10+j)%k]%=mod;
                    }
                }
            }
        }
    }
    int ans=0;
    for(int len=a;len<=b;len++){
        for(int i=len;i<=n;i++){
            ans+=dp[len][i][0];
            ans%=mod;
        }
    }
    fout<<ans;
}