Cod sursa(job #3137749)

Utilizator LucaMuresanMuresan Luca Valentin LucaMuresan Data 14 iunie 2023 19:31:50
Problema Pascal Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.63 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in ("pascal.in");
ofstream out ("pascal.out");

int get (int n, int k)
{
    int ans = 0;
    while (n)
        ans += n / k, n /= k;
    return ans;
}

int main()
{
    int n, d;
    in >> n >> d;

    int val = 1; /// C(n, 0)
    /**
    C(n, k) * x = C(n, k+1)
    f[n] / (f[k] * f[n-k]) * x = f[n] / (f[k+1] * f[n-k-1])
    x = f[k] * f[n-k] / (f[k+1] * f[n-k-1]) = (n-k) / (k+1)
    **/

    int ans = 0;

    if (d == 2)
    {
        int cnt = 0;
        for (int i=1; i<=n; i++)
        {
            if (get(n, 2) - get(i, 2) - get(n-i, 2) > 0)
                ans++;
        }
        out << ans;
    }
    else if (d == 3)
    {
        int cnt = 0;
        for (int i=0; i<n; i++)
        {
            if (get(n, 3) - get(i, 3) - get(n-i, 3) > 0)
                ans++;
        }
        out << ans;
    }
    else if (d == 5)
    {
        int cnt = 0;
        for (int i=0; i<n; i++)
        {
            if (get(n, 5) - get(i, 5) - get(n-i, 5) > 0)
                ans++;
        }
        out << ans;
    }
    else if (d == 4)
    {
        int cnt = 0;
        for (int i=0; i<n; i++)
        {
            if (get(n, 2) - get(i, 2) - get(n-i, 2) > 1)
                ans++;
        }
        out << ans;
    }
    else
    {
        int cnt2 = 0, cnt3 = 0;
        for (int i=0; i<n; i++)
        {
            if (get(n, 2) - get(i, 2) - get(n-i, 2) > 0 && get(n, 3) - get(i, 3) - get(n-i, 3) > 0)
                ans++;
            ans += !!(cnt2 && cnt3);
        }
        out << ans;
    }

    return 0;
}