Submission #645543

#TimeUsernameProblemLanguageResultExecution timeMemory
645543ymm캥거루 (CEOI16_kangaroo)C++17
100 / 100
32 ms31744 KiB
#include <bits/stdc++.h> #define Loop(x,l,r) for (ll x = (l); x < (r); ++x) #define LoopR(x,l,r) for (ll x = (r)-1; x >= (l); --x) typedef long long ll; typedef std::pair<int, int> pii; typedef std::pair<ll , ll > pll; using namespace std; const int N = 2010; const int mod = 1e9 + 7; ll out_of_bound[32]; ll dp[N][N]; int main() { cin.tie(0) -> sync_with_stdio(false); dp[0][0] = 1; int n, s, t; cin >> n; cin >> s >> t; if (s > t) swap(s, t); --s; --t; Loop (i,0,s) Loop (j,0,n) { dp[i+1][j+1] += dp[i][j]; dp[i+1][j+1] %= mod; dp[i+1][j-1] += dp[i][j] * j * (j-1); dp[i+1][j-1] %= mod; } Loop (j,0,n) { dp[s+1][j+1] += dp[s][j]; dp[s+1][j+1] %= mod; dp[s+1][j] += dp[s][j] * j; dp[s+1][j] %= mod; } Loop (i,s+1,t) Loop (j,1,n) { dp[i+1][j+1] += dp[i][j]; dp[i+1][j+1] %= mod; dp[i+1][j-1] += dp[i][j] * (j-1) * (j-1); dp[i+1][j-1] %= mod; } if (t == n-1) { cout << dp[t][1] << '\n'; return 0; } Loop (j,1,n) { dp[t+1][j+1] += dp[t][j]; dp[t+1][j+1] %= mod; dp[t+1][j] += dp[t][j] * (j-1); dp[t+1][j] %= mod; } Loop (i,t+1,n-1) Loop (j,2,n) { dp[i+1][j+1] += dp[i][j]; dp[i+1][j+1] %= mod; dp[i+1][j-1] += dp[i][j] * ((j-2) * (j-3) + (j-2) + (j-2)); dp[i+1][j-1] %= mod; } //Loop (i,0,n) { // cout << i << ": "; // Loop (j,0,i+1) // cout << dp[i][j] << ' '; // cout << '\n'; //} cout << dp[n-1][2] << '\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...