「CF1433E」Two Round Dances - 題解
阿新 • • 發佈:2020-10-21
-
前言
手玩那個逆時針順時針半天,以為是圓排列+鏡面,結果突然來訊息改題了(霧)。
-
分析
\(n\) 個人可以分成 \(2\) 組,且組別沒有任何區別。
假設先單看組合,那分成兩組的數量就是 \(\dfrac{1}{2} \times C_n^ \frac{n}{2}\) 。
現在看單個組。
一個組可以通過轉圈圈來改變不同的陣容,寫的很清楚了,就是圓排列。
因為 \(n\) 的圓排列為 \((n-1)!\) 。然後這裡又有 \(2\) 組。
所以答案為 \(\dfrac{1}{2} \times C_n^ \frac{n}{2} \times ((n-1)!)^2\) 。
因為資料較小 \(n \le 20\)
複雜度 \(O(n)\) 。
- 程式碼
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> using namespace std; typedef long long ll; const ll Maxn=20+5; ll n,mul[Maxn]; int main() { scanf("%lld",&n); mul[0]=1; for(ll i=1;i<=n;i++)mul[i]=1ll*mul[i-1]*i; printf("%lld\n",mul[n]/mul[n/2]/mul[n/2]/2*mul[n/2-1]*mul[n/2-1]); return 0; }