E. Two Round Dances(思维+圆排列组合数学)

it2024-11-12  3

https://codeforces.com/contest/1433/problem/E


其实这题直接在oeis输入最后一个数字就可以结束了

题意:有n个人,保证n是偶数,这n个人每次站成2个圈,每个圈恰好n/2个人,问你有多少种站法。其中要求每个圈按照圆排列的方式进行,也就是圆的相对顺序不一样这个圆才算不一样。

思路:

先挑n个里面的n/2个组合的人出来,在这n/2个人中进行圆排列。[左边式子]

剩下的n/2个人就是C(n/2,n/2)=1,然后也可以进行圆排列。[右边式子]

想起高中老师讲排列组合的时候这么算但是是有重复的,最后要/2;

化简得:2*n!/(n^2)

 

 

#include<iostream> #include<vector> #include<queue> #include<cstring> #include<cmath> #include<map> #include<set> #include<cstdio> #include<algorithm> #define debug(a) cout<<#a<<"="<<a<<endl; using namespace std; const int maxn=1e5+100; typedef long long LL; int main(void) { cin.tie(0);std::ios::sync_with_stdio(false); LL n;cin>>n; LL fac=1; for(LL i=1;i<=n;i++){ fac=fac*i; } fac*=2; fac/=(n*n); cout<<fac<<endl; return 0; }

 

最新回复(0)