제출 #1290410

#제출 시각아이디문제언어결과실행 시간메모리
1290410Timosh캥거루 (CEOI16_kangaroo)C++20
0 / 100
0 ms332 KiB
#include <bits/stdc++.h> using namespace std; #define int int64_t #define all(x) x.begin(), x.end() int M = 1e9 + 7; signed main() { ios::sync_with_stdio(0); cin.tie(0); // freopen("kangaroo.in", "r", stdin); // freopen("kangaroo.out", "w", stdout); int n, s, t; cin >> n >> s >> t; vector<vector<vector<int>>> dp(n + 1, vector<vector<int>>(n, vector<int>(n + 1))); s--, t--; int ans = 0; dp[s][t][n] = 1; s = n - s - 1; t = n - t - 1; dp[s][t][n] = 1; for (int z = n; z > 1; z--) for (int x = 0; x < z; x++) for (int y = 0; y < z; y++) { if (z != n && x) dp[x][y][z] += dp[x - 1][y][z]; if (x == y || dp[x][y][z] == 0) continue; // for (int i = 0; i < z; i++) // { // if (x == i) // continue; // if ((i < x) ^ (z % 2)) // continue; // int l = (i - (i > x)); // int r = (y - (y > x)); // (dp[l][r][z - 1] += dp[x][y][z]) %= M; // } if (z % 2 == 0) (dp[x + 1][y - (y > x)][z - 1] += dp[x][y][z]) %= M; else (dp[0][y - (y > x)][z - 1] += dp[x][y][z]) %= M, (dp[x][y - (y > x)][z - 1] -= dp[x][y][z] - M) %= M; } ans = dp[0][0][1]; cout << ans % M; 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...