제출 #150921

#제출 시각아이디문제언어결과실행 시간메모리
150921Mamnoon_Siam캥거루 (CEOI16_kangaroo)C++17
36 / 100
5 ms3064 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...