E. Two Round Dances

it2024-08-22  44

E. Two Round Dances

题解:先从n个元素里选择n/2个,然后另一个圆也就确定了,对两个圆进行圆排列,但可能会有重复的所以/2

圆排列公式:从n个元素中选r进行圆排列。

#include <iostream> #include <cstring> #include <cmath> #include <map> #include <set> #include <bits/stdc++.h> #include <algorithm> using namespace std; typedef long long ll; typedef pair<int,int>P; const int N = 5e3+10; const int inf = 0x7f7f7f7f; ll fun(ll n){ ll sum = 1; for(ll i = 1;i <= n;i++){ sum = sum*i; } return sum; } int main(){ // srand((unsigned)time(0)); /* int n;cin >> n; for(int i = 1;i <= n;i++){ a[i] = i; } fun1(n); int ans = 1; do{ if(fun(n)){ ans++; fun1(n); } }while(next_permutation(a+1,a+1+n)); cout<<ans<<endl; */ ll n;cin >> n; ll ans = 1,x = 1; for(ll i = n/2+1;i <= n;i++){ ans = ans*i; } for(ll i = 1;i <= n/2;i++){ x = x*i; } ans /= x; ans = ans*fun(n/2-1)*fun(n/2-1); ans /= 2; cout<<ans<<endl; return 0; } /* 2 1 3 1 4 3 5 12 6 60 */
最新回复(0)