Cod sursa(job #2979968)

Utilizator pielevladutPiele Vladut Stefan pielevladut Data 16 februarie 2023 09:30:39
Problema Diviz Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <bits/stdc++.h>

using namespace std;

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

const int mod = 30103;

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

/// dp[i][j] -> numarul de numere distincte formate din i cifre, care dau restul j

int cnt(int nrCif)
{
    for(int prefix = 1; prefix <= nrCif; prefix ++)
    {
        for(int rest = 0; rest <= k - 1; rest ++)
        {
            for(int cifra = 1; cifra <= n; cifra ++)
            {
                dp[prefix][(rest * 10 + s[cifra]) % k] += dp[prefix - 1][rest];
                dp[prefix][(rest * 10 + s[cifra]) % k] %= mod;
            }
        }
    }
    dp[0][0] = 0;
    return dp[nrCif][0];
}

int main()
{
    fin >> k;
    fin >> a >> b;
    fin >> (s + 1);
    n = strlen(s + 1);
    dp[0][0] = 1;
    int v1 = cnt(b);
    for(int i = 0; i <= 200; i ++)
    {
        for(int j = 0; j <= 100; j ++)
        {
            dp[i][j] = 0;
        }
    }
    dp[0][0] = 1;
    int v2 = cnt(a - 1);
    v1 -= v2;
    if(v1 < 0)
    {
        v1 += mod;
    }
    fout << v1 << '\n';
    return 0;
}