Submission #796972

#TimeUsernameProblemLanguageResultExecution timeMemory
796972GusterGoose27Festivals in JOI Kingdom 2 (JOI23_festival2)C++17
37 / 100
9080 ms616 KiB
#pragma GCC optimize("Ofast,unroll-loops") #include <bits/stdc++.h> using namespace std; #define int long long typedef long long ll; int n, MOD; const int MAXN = 300; int dp[MAXN][MAXN][2]; int fac[MAXN]; int facinv[MAXN]; void free_endings(int i) { // how much stuff is left to allocate for (int j = 0; j <= n-i; j++) { // only this much stuff can actually exist for (int a = 0; a < 2; a++) { dp[i][j][a] = ((ll)dp[i][j][a]*facinv[j])%MOD + (j ? dp[i][j-1][a] : 0); dp[i][j][a] %= MOD; } } for (int j = 0; j <= n-i; j++) { for (int a = 0; a < 2; a++) dp[i][j][a] = ((ll)dp[i][j][a]*fac[j])%MOD; } } int expo(ll a, int b) { ll cur = 1; while (b) { if (b & 1) { cur = (cur*a)%MOD; } a = (a*a)%MOD; b /= 2; } return cur; } int inv(int a) { return expo(a, MOD-2); } ll choose(int a, int b) { ll cur = fac[a]*facinv[b]; cur %= MOD; return (cur*facinv[a-b])%MOD; } signed main() { cin >> n >> MOD; fac[0] = facinv[0] = 1; for (int i = 1; i <= n; i++) { fac[i] = ((ll)i*fac[i-1])%MOD; } facinv[n] = inv(fac[n]); for (int i = n-1; i > 0; i--) { facinv[i] = ((ll)(i+1)*facinv[i+1])%MOD; } for (int i = 0; i <= n; i++) { dp[0][i][0] = fac[i]; dp[0][i][1] = fac[i+1]; } for (int i = 1; i <= n; i++) { for (int j = 0; j <= n-i; j++) { for (int a = 0; a <= i-1; a++) { for (int b = 0; b <= j; b++) { for (int t1 = 0; t1 < 2; t1++) { for (int t2 = 0; t2 < 2; t2++) { if (t2 && a == i-1) continue; ll cur = (ll)dp[i-a-1-t2][j+a-b][t2]*fac[a+b+t1+t2];; cur %= MOD; cur *= choose(j, b); cur %= MOD; cur *= facinv[a]; cur %= MOD; dp[i][j][t1] += cur; dp[i][j][t1] %= MOD; } } } } } free_endings(i); } ll oth = 1; for (int i = 2*n-1; i > 0; i -= 2) { oth = (oth*i)%MOD; } cout << (oth+MOD-dp[n][0][0])%MOD << '\n'; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...