Submission #509640

#TimeUsernameProblemLanguageResultExecution timeMemory
509640duchungNoM (RMI21_nom)C++17
100 / 100
164 ms165256 KiB
#include<bits/stdc++.h> using namespace std; #define int long long const int mod = 1e9 + 7; const int N = 4005; int n , m; int fact[N] , inv[N] , cnt[N] , pre[N]; int C[N][N] , dp[N][N]; int Add(int x , int y) { return (x + y >= mod ? x + y - mod : x + y); } int Sub(int x , int y) { return (x - y < 0 ? x - y + mod : x - y); } int Mul(int x , int y) { return x * y % mod; } int binpow(int n , int k) { int ret = 1; while(k) { if (k & 1) ret = Mul(ret , n); n = Mul(n , n); k >>= 1; } return ret; } void build() { fact[0] = 1; for (int i = 1 ; i < N ; ++i) fact[i] = Mul(fact[i - 1] , i); inv[0] = 1; for (int i = 1 ; i < N ; ++i) inv[i] = binpow(fact[i] , mod - 2); for (int i = 0 ; i < 2 * n ; ++i) cnt[i % m + 1]++; // for (int i = 1 ; i < m ; ++i) pre[i] = pre[i - 1] + cnt[i]; C[0][0] = 1; for (int i = 1 ; i < N ; ++i) { C[i][0] = 1; for (int j = 1 ; j < N ; ++j) C[i][j] = Add(C[i - 1][j] , C[i - 1][j - 1]); } } signed main() { // freopen("input.inp","r",stdin); // freopen("output.out","w",stdout); ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m; build(); dp[0][0] = 1; for (int i = 1 ; i <= m ; ++i) { for (int j = 0 ; j <= n ; ++j) { for (int k = 0 ; 2 * k <= cnt[i] && k <= j ; ++k) { int cur = dp[i - 1][j - k]; cur = Mul(cur , fact[cnt[i]]); cur = Mul(cur , inv[cnt[i] - k * 2]); cur = Mul(cur , C[j][k]); dp[i][j] = Add(dp[i][j] , cur); } } } int ans = 0; for (int j = 0 ; j <= n ; ++j) { if (j & 1) ans = Sub(ans , Mul(fact[n * 2 - j * 2] , Mul(C[n][j] , dp[m][j]))); else ans = Add(ans , Mul(fact[n * 2 - j * 2] , Mul(C[n][j] , dp[m][j]))); } cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...