Cod sursa(job #3216906)

Utilizator Robert_MitriRobert Mitri Robert_Mitri Data 20 martie 2024 12:17:02
Problema Diviz Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("diviz.in");
ofstream fout("diviz.out");

int d[105][205];

int n,k,a,b;
char s[205];

const int mod=30103;

const int INF = 1e9;

int main()
{
    fin>>k>>a>>b;
    fin>>s;
    for(int r=0; r<k; r++)
        for(int l=0; l<=b; l++)
            d[r][l]=INF;
    d[0][0]=1;
    for(int i=0; s[i]; i++)
    {
        for(int l=b-1; l>0; l--)
            for(int r=0; r<k; r++)
                if(d[r][l]!=INF)
                {

                    if(d[(r*10 + s[i]-'0')%k][l+1]==INF)
                        d[(r*10 + s[i]-'0')%k][l+1]=d[r][l];
                    else
                        d[(r*10 + s[i]-'0')%k][l+1]=(d[(r*10 + s[i]-'0')%k][l+1] + d[r][l])%mod;
                }
        if(s[i]-'0'>0)
        {
            int l = 0;
            for(int r=0; r<k; r++)
                if(d[r][l]!=INF)
                {
                    if(d[(r*10 + s[i]-'0')%k][l+1]==INF)
                        d[(r*10 + s[i]-'0')%k][l+1]=d[r][l];
                    else
                        d[(r*10 + s[i]-'0')%k][l+1]=(d[(r*10 + s[i]-'0')%k][l+1] + d[r][l])%mod;

                }
        }
    }
    int sol = 0;
    for(int i = a; i<=b; i++)
        if(d[0][i]!=INF)
            sol =(sol + d[0][i])%mod;
    fout<<sol;
}