Submission #1354537

#TimeUsernameProblemLanguageResultExecution timeMemory
1354537uranhishigKangaroo (CEOI16_kangaroo)C++20
6 / 100
0 ms344 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long

const int mod = 1e9 + 7;

signed main() {
    int n, cs, cf;
    cin >> n >> cs >> cf;
    if(n <= 8){
        vector<int> a(n);
        for (int i = 0; i < n; i++) {
            a[i] = i + 1;
        }
        int cnt = 0;
        do{
            if(a[0] == cs and a[n - 1] == cf){
                bool ok = true;
                for (int i = 1; i < n-1; i++) {
                    int pre = a[i - 1];
                    int cur = a[i];
                    int nxt = a[i + 1];
                    if(pre < cur and nxt >= cur) {
                        ok = false;
                        break;
                    }
                    if(pre >= cur and nxt <= cur){
                        ok = false;
                        break;
                    }
                }
                if(ok) cnt++;
            }

        }while(next_permutation(a.begin(), a.end()));
        cout << cnt;
        return 0;
    }


    int dp[n + 1][n + 1][2]; 
    int last = -1;
    dp[cs][cs][0] = 1;
    dp[cs][cs][1] = 1;
    for (int l = 1; l <= n; l++) {
        for (int r = l; r <= n; r++) {
            if(l >= 2) dp[l-1][r][1] += dp[l][r][0];
            if(r <= n - 1) dp[l][r + 1][0] += dp[l][r][1];
        }
    }
    cout << max(dp[1][n][0], dp[1][n][1]);
    return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...