Cod sursa(job #2351368)

Utilizator popabogdanPopa Bogdan Ioan popabogdan Data 22 februarie 2019 11:59:03
Problema Diviz Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <bits/stdc++.h>

#define Nmax 205
#define Kmax 105
#define md 30103

using namespace std;

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

int N;
int dp[2][Nmax][Kmax];
int K, A, B;
char C[Nmax];

int main()
{
    fin >> K >> A >> B;
    fin >> (C + 1);
    N = strlen(C + 1);
    dp[0][0][0] = 1;
    int ans = 0;
    for(int i = 1; i <= N; i++)
    {
        int dig = C[i] - '0';
        memset(dp[i & 1], 0, sizeof(dp[i & 1]));
        dp[i & 1][0][0] = 1;
        for(int rem = 0; rem < K; rem++)
        {
            int newRem = (rem * 10 + dig) % K;
            for(int k = 1 + (dig == 0); k <= min(i, B); k++)
                dp[i & 1][newRem][k] = (dp[i & 1][newRem][k] + dp[1 - (i & 1)][newRem][k] + dp[1 - (i & 1)][rem][k - 1]) % md;
        }
    }
    for(int i = A; i <= B; i++)
        ans = (ans + dp[N & 1][0][i]) % md;
    fout << ans << "\n";
    return 0;
}