Pagini recente » Cod sursa (job #924975) | Rating Dragan Vlad (vlad233) | Profil petrisorvmy | Profil popoiu.george | Cod sursa (job #3294831)
#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;
}