Cod sursa(job #2631954)

Utilizator Stefan_PiscuPiscu Stefan Constantin Stefan_Piscu Data 1 iulie 2020 17:40:31
Problema Diviz Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <bits/stdc++.h>
using namespace std;

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

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

int dp[203][203][103], previ[12][103];

int main()
{
  fin>>k>>a>>b;
  fin>>n;
  len=n.size();
  n='$'+n;
  for(int i=0;i<=len;++i) dp[0][i][0]=1;
  for(int l=1;l<=b;++l){
    for(int cif=0;cif<10;++cif){
      for(int j=0;j<k;++j) previ[cif][j]=0;
    }
    for(int i=l;i<=len;++i){
      for(int j=0;j<k;++j){
        int newj=(j*10+(n[i]-'0'))%k;
        dp[l][i][newj]+=dp[l-1][i-1][j];
        dp[l][i][newj]+=dp[l][i-1][newj];
        dp[l][i][newj]%=30103;
      }
      for(int j=0;j<k;++j){
        dp[l][i][j]-=previ[n[i]-'0'][j];
        dp[l][i][j]=(dp[l][i][j]+30103)%30103;
        previ[n[i]-'0'][j]+=(dp[l][i][j]-dp[l][i-1][j]+30103);
        previ[n[i]-'0'][j]%=30103;
      }
    }

  }
  int sol=0;
  for(int i=a;i<=b;++i) sol=(sol+dp[i][len][0])%30103;
  fout<<sol<<"\n";
  return 0;
}