Submission #1223780

#TimeUsernameProblemLanguageResultExecution timeMemory
1223780chaeryeongTents (JOI18_tents)C++20
100 / 100
194 ms98364 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int MOD = 1e9 + 7; int add (int a, int b) { a += b; if (a >= MOD) a -= MOD; return a; } int sub (int a, int b) { a -= b; if (a < 0) a += MOD; return a; } int mul (int a, int b) { return (a * 1ll * b) % MOD; } int power (int a, int b) { if (!b) return 1; int u = power(a, b >> 1); u = mul(u, u); if (b & 1) u = mul(u, a); return u; } const int N = 5000; int fact[N + 1], inv[N + 1]; int nCr (int a, int b) { return mul(fact[a], mul(inv[b], inv[a - b])); } int dp[N + 1][N + 1]; void solve () { fact[0] = 1; for (int i = 1; i <= N; i++) { fact[i] = mul(i, fact[i - 1]); } inv[N] = power(fact[N], MOD - 2); for (int i = N - 1; i >= 0; i--) { inv[i] = mul(i + 1, inv[i + 1]); } for (int i = 0; i <= N; i++) { dp[0][i] = 1; } for (int i = 1; i <= N; i++) { dp[i][0] = 1; for (int j = 1; j <= N; j++) { dp[i][j] = add(dp[i][j], dp[i - 1][j]); dp[i][j] = add(dp[i][j], mul(4 * j, dp[i - 1][j - 1])); if (i >= 2) { dp[i][j] = add(dp[i][j], mul(j * (i - 1), dp[i - 2][j - 1])); } if (j >= 2) { dp[i][j] = add(dp[i][j], mul(j * (j - 1) / 2, dp[i - 1][j - 2])); } } } int x, y; cin >> x >> y; cout << sub(dp[x][y], 1) << '\n'; } signed main () { ios::sync_with_stdio(0); cin.tie(0); int tc = 1; //cin >> tc; while (tc--) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...