Submission #446883

# Submission time Handle Problem Language Result Execution time Memory
446883 2021-07-23T16:55:13 Z aniervs Kangaroo (CEOI16_kangaroo) C++17
0 / 100
0 ms 332 KB
#ifdef LOCAL
#include <prettyprint.hpp>
#endif
#include<bits/stdc++.h>
#define endl '\n'
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define lg2(x) __lg(x)
#define rem_dupl(x) sort(all(x)); x.erase(unique(all(x)), x.end())
using namespace std;

typedef long long ll;
typedef double db;
typedef pair<int,int> ii;
#define x first
#define y second

//mt19937 rand32(chrono::steady_clock::now().time_since_epoch().count());
//mt19937_64 rand64(chrono::steady_clock::now().time_since_epoch().count());

const db eps = 1e-9;
const int maxn = (int)2e3 + 5;
const ll mod = (int)1e9 + 7; // 998244353

ll mul(ll a, ll b){
    return a * b % mod;
}
ll add(ll a, ll b){
    return (a + b)%mod;
}

ll dp[maxn][maxn];

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    cout.setf(ios::fixed); cout.precision(0);

    int n, s, t;
    cin >> n >> s >> t;
    dp[1][1] = 1;
    
    for(int i = 1; i < n; i++)
        for(int j = 1; j <= i; j++){
            if(i + 1 == s or i + 1 == t){
                dp[i+1][j] = add(dp[i + 1][j], dp[i][j]);
                dp[i+1][j+1] = add(dp[i + 1][j + 1], dp[i][j]);
                continue;
            }
            dp[i+1][j+1] = add(dp[i+1][j+1], mul(dp[i][j], j + 1 - (int)(i >= s) - (int)(i >= t)));
            dp[i+1][j-1] = add(dp[i+1][j-1], mul(dp[i][j], j - 1));
            dp[i+1][j] = add(dp[i+1][j], mul(dp[i][j], 2*(j-1) + (int)(i < t) + (int)(i < s)));
        }
    
    cout << dp[n][1];
    
    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 332 KB Output is correct
2 Incorrect 0 ms 332 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 332 KB Output is correct
2 Incorrect 0 ms 332 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 332 KB Output is correct
2 Incorrect 0 ms 332 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 332 KB Output is correct
2 Incorrect 0 ms 332 KB Output isn't correct