제출 #1193902

#제출 시각아이디문제언어결과실행 시간메모리
1193902Ghulam_Junaid캥거루 (CEOI16_kangaroo)C++17
100 / 100
50 ms55112 KiB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

const int N = 2005, mod = 1e9 + 7;
int n, st, en;
ll dp[N][N][3];

int main(){
    cin >> n >> st >> en;
    dp[1][1][(st == 1) + (en == 1)] = 1;
    for (int i = 1; i < n; i ++){
        for (int j = 1; j <= i; j ++){
            if (i + 1 == st or i + 1 == en){
                for (int k = 0; k < 2; k ++){
                    dp[i + 1][j][k + 1] += dp[i][j][k];
                    dp[i + 1][j][k + 1] %= mod;
                    dp[i + 1][j + 1][k + 1] += dp[i][j][k];
                    dp[i + 1][j + 1][k + 1] %= mod;
                }
                continue;
            }

            for (int k = 0; k < 3; k ++){
                dp[i + 1][j + 1][k] += dp[i][j][k] * (j + 1 - k);
                dp[i + 1][j + 1][k] %= mod;
                dp[i + 1][j - 1][k] += dp[i][j][k] * (j - 1);
                dp[i + 1][j - 1][k] %= mod;
            }
        }
    }
    cout << dp[n][1][2] << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...