Submission #223097

#TimeUsernameProblemLanguageResultExecution timeMemory
223097super_j6Ruins 3 (JOI20_ruins3)C++14
0 / 100
11 ms6272 KiB
#include <iostream> #include <cstdio> #include <algorithm> #include <string.h> using namespace std; #define endl '\n' #define pi pair<int, int> #define f first #define s second #define ll long long const int mod = 1000000007; const int maxn = 603; int n; bool a[2 * maxn]; int p[maxn]; int c[maxn][maxn], f[maxn][maxn]; int dp[maxn], dp2[maxn]; int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cin >> n; for(int i = 0; i < n; i++){ int x; cin >> x; a[x] = 1; } f[0][0] = c[0][0] = 1; for(int i = 0; i < n; i++) for(int j = i; j <= 2 * i && j < n; j++){ (f[i + 1][j + 2] += f[i][j]) %= mod; (f[i + 1][j + 1] += 2 * f[i][j] % mod) %= mod; (f[i + 1][j] += f[i][j]) %= mod; } for(int i = 0, j = 1; i < n; i++){ p[i] = (ll)f[i][i] * j % mod * (i + 2) % mod; j = (ll)j * (i + 1); for(int k = 0; k <= i; k++){ c[i + 1][k] = c[i + 1][k] + c[i][k]; c[i + 1][k + 1] = c[i + 1][k + 1] + c[i][k]; } } dp[0] = 1; for(int i = 2 * n, x = 0, y = 0; i > 0; i--){ if(a[i]){ memcpy(dp2 + y, dp + y, (x - y + 1) * sizeof(ll)); for(int j = y; j <= x; j++) for(int k = j; k <= x; k++){ (dp[k + 1] += (ll)dp2[j] * c[x - j][k - j] % mod * p[k - j] % mod) %= mod; } x++; }else{ for(int j = y; j <= x; j++) dp[j] = (ll)dp[j] * (j - y) % mod; y++; } } int ret = dp[n]; for(int i = n, j = (mod + 1) / 2; i; i >>= 1){ if(i & 1) ret = (ll)ret * j % mod; j = (ll)j * j % mod; } cout << ret << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...