Submission #1242417

#TimeUsernameProblemLanguageResultExecution timeMemory
1242417muhammad_ahmadKangaroo (CEOI16_kangaroo)C++20
100 / 100
44 ms55112 KiB
// #pragma GCC target ("avx2") // #pragma GCC optimize ("O3") // #pragma GCC optimize ("unroll-loops") // #include <bits/stdc++.h> #include <iostream> #include <cmath> #include <algorithm> #include <map> #include <vector> #include <iomanip> #include <string> #include <queue> #include <set> #include <deque> #include <numeric> #include <stack> using namespace std; #define int long long #define endl "\n" int dp[2005][2005][3]; const int M = 1e9 + 7; // c++ o // c x // c-- o void solve() { int n, s, t; cin >> n >> s >> t; if (s == 1 or t == 1) dp[1][1][1] = 1; else dp[1][1][0] = 1; for (int i = 1; i < n; i++){ for (int j = 1; j <= i; j++){ if (i + 1 == s or i + 1 == t){ dp[i + 1][j + 1][1] += dp[i][j][0]; dp[i + 1][j + 1][1] %= M; dp[i + 1][j][1] += dp[i][j][0]; dp[i + 1][j][1] %= M; dp[i + 1][j + 1][2] += dp[i][j][1]; dp[i + 1][j + 1][2] %= M; dp[i + 1][j][2] += dp[i][j][1]; dp[i + 1][j][2] %= M; } else { dp[i + 1][j + 1][0] += dp[i][j][0] * (j + 1); dp[i + 1][j + 1][0] %= M; dp[i + 1][j + 1][1] += dp[i][j][1] * (j); dp[i + 1][j + 1][1] %= M; dp[i + 1][j + 1][2] += dp[i][j][2] * (j - 1); dp[i + 1][j + 1][2] %= M; dp[i + 1][j - 1][0] += dp[i][j][0] * (j - 1); dp[i + 1][j - 1][0] %= M; dp[i + 1][j - 1][1] += dp[i][j][1] * (j - 1); dp[i + 1][j - 1][1] %= M; dp[i + 1][j - 1][2] += dp[i][j][2] * (j - 1); dp[i + 1][j - 1][2] %= M; } } } cout << dp[n][1][2] << endl; return; } signed main() { // freopen("", "r", stdin); // freopen("", "w", stdout); ios::sync_with_stdio(0); cin.tie(0), cout.tie(0); cout << setprecision(9); srand(time(0)); int tc = 1; // cin >> tc; while (tc--) { solve(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...