제출 #1148740

#제출 시각아이디문제언어결과실행 시간메모리
1148740sonamoo악수 (kriii4_D)C++20
100 / 100
145 ms6352 KiB
#include <bits/stdc++.h>
#define FastIO ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define pii pair<int,int>
#define ll long long int
#define SIZE 500005
#define all(v) v.begin(), v.end()
#define pb push_back
#define MOD 1000000007
#define INF 1000000007
using namespace std;

ll C[44][805] , D[44][805] , comb[888][888] , inv[888] , fact[888];

ll POW(ll x , ll y) {
    if (y == 0) return 1;
    if (y == 1) return x%MOD;

    ll t = POW(x , y/2);

    if (y%2 == 1) return ((t*t%MOD)*x)%MOD;
    else return t*t%MOD;
}

int main() {
    FastIO;

    int N , M;
    cin >> N;
    comb[0][0] = inv[0] = fact[0] = 1;
    for (int i = 1; i < 888; i++) {
        comb[i][0] = 1;
        fact[i] = (fact[i-1]*i)%MOD;
        for (int j = 1; j <= i; j++) comb[i][j] = (comb[i-1][j-1]+comb[i-1][j])%MOD;
        inv[i] = POW(fact[i] , MOD-2);
    }

    C[1][0] = 1; D[1][0] = 1;
    for (int n = 2; n <= N; n++) {
        M = n*(n-1)/2;
        for (int k = n-1; k <= M; k++) {
            for (int i = 1; i <= n-1; i++) {
                for (int j = 0; j <= k-1; j++) {
                    ll ret = (comb[n-1][i-1]*comb[k-1][j])%MOD;
                    ret *= D[i][j]; ret %= MOD;
                    ret *= D[n-i][k-j-1]; ret %= MOD;
                    ret *= i; ret %= MOD;
                    ret *= (n-i); ret %= MOD;
                    C[n][k] += ret; C[n][k] %= MOD;
                }
            }
            D[n][k] = C[n][k];
            D[n][k] += ((M-(k-1))*D[n][k-1])%MOD; D[n][k] %= MOD;
            //         //   printf("%d %d : %lld %lld\n" , n , k , C[n][k] , D[n][k]);
        }
    }

    ll ans=0;
    for (int k = 0; k <= M; k++) {
        ll ret = (C[N][k]*fact[M-k])%MOD;
        ret *= inv[M]; ret %= MOD;
        ret *= k; ret %= MOD;
        ans += ret; ans %= MOD;
    }

    cout << ans;

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...