이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int maxn = 55;
int n, cs, cf;
int dp[maxn][maxn][maxn][2];
int f(int l, int r, int t, int dir) {
int &ret = dp[l][r][t][dir];
if(ret != -1) return ret;
if(l + r == 1) return ret = (l ^ 1) == dir;
if((!dir and !l) or (dir and !r)) return ret = 0;
ret = 0;
if(!dir) {
for(int i = 1; i <= l; i++) {
if(i == t) continue;
ret += f(i - 1, l + r - i, t - (i < t), dir ^ 1);
if(ret >= mod) ret -= mod;
}
} else {
for(int i = l + 1; i <= l + r; i++) {
if(i == t) continue;
ret += f(i - 1, l + r - i, t - (i < t), dir ^ 1);
if(ret >= mod) ret -= mod;
}
} return ret;
}
int main(int argc, char const *argv[])
{
// freopen("in", "r", stdin);
memset(dp, -1, sizeof dp);
cin >> n >> cs >> cf;
int l = f(cs - 1, n - cs, cf - (cs < cf), 0);
int r = f(cs - 1, n - cs, cf - (cs < cf), 1);
cout << (l + r) % mod << endl;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |