ARC076 - C
C - Reconciled?
区別可能な犬 N 匹と猿 M 匹を一列に並べる.
犬同士・猿同士が隣り合わないような並べ方の総数を 1e9 + 7 で割った余りを求める.
abs(N - M) ≧ 2 となる場合
互い違いに並べるのは不可能.0 を返す.abs(N - M) = 1 となる場合
多い方を a,少ない方を b とすると,abab...baba のように並べることが可能.
$\max (N, M)! \times \min (N, M)! \ \mod 1000000007$ が答え.abs(N - M) = 0 となる場合
abab...abab または baba...baba のように並べることが可能.
$\max (N, M)! \times \min (N, M)! \times 2 \ \mod 1000000007$ が答え.
ll modfac(ll n, ll MOD = 1000000007) { ll res = 1; for (ll i = 1; i <= n; i++) res = res * i % MOD; return res; } int main() { cin.tie(0); ios::sync_with_stdio(false); ll N, M, MOD = 1000000007; cin >> N >> M; if (abs(N - M) >= 2) { cout << 0 << endl; return 0; } cout << modfac(N) * modfac(M) * (N == M ? 2 : 1) % MOD << endl; return 0; }