제출 #425409

#제출 시각아이디문제언어결과실행 시간메모리
425409Lam_lai_cuoc_doiKangaroo (CEOI16_kangaroo)C++17
0 / 100
9 ms15948 KiB
#include <bits/stdc++.h>

using namespace std;
using ll = long long;
using ld = long double;
using ull = unsigned long long;

constexpr bool typetest = 0;
constexpr int N = 2e3 + 2;
int n, cs, cf, v;
int dp[N][N], f1[N][N];

void Read()
{
    cin >> n >> cs >> cf;
    if (cs > cf)
        swap(cs, cf);
    v = n - cf;
}

ll f(int n, int i)
{
    if (dp[n][i] != -1)
        return dp[n][i];
    if (i == 1)
        return dp[n][i] = f1[n][n - v];
    if (i == 2)
        return dp[n][i] = f1[n][n - v] + f1[n - 1][n - 1 - v];

    return dp[n][i] = 2 * f(n, i - 1) - f(n, i - 2) - f(n - 2, i - 2);
}

void Solve()
{
    f1[1][1] = 1;
    for (int i = 2; i <= n; ++i)
    {
        if (i & 1)
            f1[i][2] = 1;
        for (int j = 2; j <= i; ++j)
            f1[i][j] += (i & 1) ? f1[i][j - 1] - f1[i - 1][j - 1] : f1[i][j - 1] + f1[i - 1][j - 1];
    }
    memset(dp, -1, sizeof dp);
    cout << f(n, cs);
}

int32_t main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int t(1);
    if (typetest)
        cin >> t;
    for (int _ = 1; _ <= t; ++_)
    {
        Read();
        Solve();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...