Submission #1127460

#TimeUsernameProblemLanguageResultExecution timeMemory
1127460cpismayilmmdv985캥거루 (CEOI16_kangaroo)C++20
100 / 100
25 ms14152 KiB
#include <bits/stdc++.h>

using namespace std;

template<typename T1, typename T2>ostream& operator<<(ostream &os, const pair<T1, T2> &p) {return os << '{' << p.first << ", " << p.second << '}';}
template<typename T_container, typename T = typename enable_if<!is_same<T_container, string>::value, typename T_container::value_type>::type> ostream& operator<<(ostream &os, const T_container &v) { os << '{'; string sep; for (const T &x : v) os << sep << x, sep = ", "; return os << '}'; }
template <typename K, typename V> ostream& operator<<(ostream& os, const map<K, V>& m) {os << "{";for (auto it = m.begin(); it != m.end(); ++it) {if (it != m.begin()) os << ", "; os << it->first << " : " << it->second;}return os << "}";}
void debug() { cerr << endl; }
template<typename Head, typename... Tail>
void debug(Head H, Tail... T) { cerr << H; debug(T...); }
#ifdef ONPC
#define deb(...) cerr << '[' << __FILE__ << ':' << __LINE__ << "] (" << #__VA_ARGS__ << "):", debug(__VA_ARGS__)
#else
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#define deb(...)
#endif

const int mxN = 2e3 + 5;
const int mod = 1e9 + 7;
const int dx4[] = {1, -1, 0, 0}, dy4[] = {0, 0, -1, 1};
const int dx8[] = {1, -1, 0, 0, 1, -1, 1, -1}, dy8[] = {0, 0, -1, 1, 1, -1, -1, 1};

int dp[mxN][mxN];

void run_case() {
    int n, cs, cf, fixed = 0;
    cin >> n >> cs >> cf;
    dp[1][1] = 1;
    for (int i = 1; i <= n; i++) {
        if (i == cs || i == cf) fixed++;
        for (int j = 1; j < i; j++) {
            if (i == cs || i == cf) {
                dp[i][j + 1] += dp[i - 1][j];
                dp[i][j] += dp[i - 1][j];
            } else {
                dp[i][j + 1] += (1LL * (j + 1 - fixed) * dp[i - 1][j]) % mod;
                dp[i][j - 1] += (1LL * (j - 1) * dp[i - 1][j]) % mod;
            }
            dp[i][j - 1] %= mod;
            dp[i][j] %= mod;
            dp[i][j + 1] %= mod;
        }
    }
    cout << dp[n][1];
    return;
}

int main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    int test_case = 1;
    // cin >> test_case;
    for (int num_case = 1; num_case <= test_case; num_case++) {
        run_case();
    }
    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...