Submission #1273340

#TimeUsernameProblemLanguageResultExecution timeMemory
1273340madamadam3캥거루 (CEOI16_kangaroo)C++20
100 / 100
78 ms63040 KiB
#include <bits/stdc++.h>

using namespace std;
using i128 = __int128_t;
const i128 MOD = 1e9 + 7;

i128 goodmod(i128 x) {
    x = x % MOD;
    if (x < 0) x += MOD;
    return x;
}

signed main() {
    int N, S, T; cin >> N >> S >> T;
    i128 n = N, s = S, t = T; 

    vector<i128> r1({1});

    for (int i = 2; i <= n; i++) {
        vector<i128> nr1(i, 0);

        if (i % 2 == 0) for (int j = 1; j < i; j++) nr1[j] = goodmod(r1[j-1] + nr1[j-1]);
        else for (int j = i-2; j >= 1; j--) nr1[j] = goodmod(nr1[j+1] + r1[j]);

        r1 = nr1;
    }

    vector<vector<i128>> table(n, vector<i128>(n, 0));
    table[0] = r1;

    for (int i = 1; i < n; i++) {
        if (n % 2 == 0) {
            for (int j = i+1; j < n; j++) {
                table[i][j] = goodmod(table[i-1][j]) + goodmod(table[i-1][j] - table[i-1][j-1]);
            }
        } else {
            int pt = 1;
            for (int j = i+1; j < n; j++) {
                table[i][j] = table[0][pt];
                pt++;
            }
        }
    }

    for (int i = 0; i < n; i++) {
        for (int j = i+1; j < n; j++) {
            table[j][i] = table[i][j];
        }
    }

    // for (int i = 0; i < n; i++) {
    //     for (int j = 0; j < n; j++) {
    //         cout << table[i][j] << "\t";
    //     }
    //     cout << "\n";
    // }

    cout << int(goodmod(table[s-1][t-1])) << "\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...