задача не проходит по времени

В соревнованиях по хоккею участвует N команд. Сколько существует вариантов распределения комплектов золотых, серебряных и бронзовых медалей, если одно призовое место может занять только одна команда?

#include <iostream>

using namespace std;

long long facktN(int n) {
    if (n == 0 || n == 1) {
        return 1;
    }
    return n * facktN(n - 1);
}

int main() {
    int n, k = 3, ans = 0;
    cin >> n;
    int r = n - k;
    cout << facktN(n) / facktN(r);

    return 0;
}

Ответы (1 шт):

Автор решения: vp_arth
cout << (n * (n-1) * (n-2));

В соревнованиях по хоккею участвует N команд. Сколько существует вариантов распределения комплектов золотых, серебряных и бронзовых медалей, если одно призовое место может занять только одна команда?

if (n > 2) cout << (n * (n-1) * (n-2));
else if (n == 2) cout << 2; // только золото и серебро
else cout << 1; // Сыграть не получится, но золото, небось дадут?
→ Ссылка