はまやんはまやんはまやん

hamayanhamayan's blog

仲介人moko [yukicoder No.727]

https://yukicoder.me/problems/no/727

解説

https://yukicoder.me/submissions/280706

組合せ数学をする。
(全体の組合せ)=(買われた関係の組合せ)×(売り手の置き方の組合せ)×(買い手の置き方の組合せ)
 
(買われた関係の組合せ)は先頭から何番目の人と関係をもたせるかを考えていく。
すると、相手が決まっていない最初の人は2N-1通り選択肢がある。
相手が決まっていない2番目の人は2N-3通り選択肢がある。
これを続けると(2N-1)*(2N-3)*(2N-5)*...*3*1となる。
 
置き方の組み合わせ数はどちらもN!なので、すべてかけると答えになる。

int N;
Comb<mint, 2010101> com;
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> N;

    mint ans = com.fac[N] * com.fac[N];
    int i = 2 * N - 1;
    while (0 < i) {
        ans *= i;
        i -= 2;
    }
    cout << ans << endl;
}