E. Two Round Dances

不哭的超人發表於2020-10-21

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
*/