Submission #1148740

#TimeUsernameProblemLanguageResultExecution timeMemory
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...