Cod sursa(job #3294831)

Utilizator Cyb3rBoltSbora Ioan-David Cyb3rBolt Data 29 aprilie 2025 11:00:32
Problema Arbori Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("arbori.in");
ofstream fout("arbori.out");
typedef long long ll;
int n, mod, rest, st[110];
ll rez;

inline void afis(int k) {
    for(int i=1; i<=k; i++) cout << st[i] << " ";
    cout << '\n';
}

inline void backTrack(int k, int trebe, int maxSum, int last, int sum, int ramas) {
    if(k > trebe) {
        if(sum != 0) {
            ///sa fie si valid
            //afis(k - 1);
            if(sum == ramas) rez++;
            else backTrack(1, sum, maxSum - sum, (rest - 1 + mod) % mod, 0, ramas - sum);
        }
    }
    else {
        ///verific daca pot sa pun 0(adk sa fie frunza)
        if(st[k - 1] == 0) {
            st[k] = 0;
            backTrack(k + 1, trebe, maxSum, last, sum, ramas);
        }
        ///tot timpu le fac crescatoare sa nu mi se repete
        for(int i=last; sum + i <= maxSum; i+=mod) {
            st[k] = i;
            backTrack(k + 1, trebe, maxSum, i, sum + i, ramas);
        }
    }
}

int main()
{
    fin >> n >> mod >> rest;
    backTrack(1, 1, n - 1, mod, 0, n - 1);
    fout << rez;

    return 0;
}