제출 #1189936

#제출 시각아이디문제언어결과실행 시간메모리
1189936Rafiullah캥거루 (CEOI16_kangaroo)C++20
100 / 100
50 ms55112 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define mod 1000000007
const int N = 2e3 + 5;
int dp[N][N][3];
void solve(){
	int n, s, f;
    cin >> n >> s >> f;
    dp[1][1][(s == 1) + (f == 1)] = 1;
    for (int i = 1 ; i<n ; i++)  
        for (int j = 1 ; j<= i ; j++)
            if (i+1 == s || i+1 == f) {
                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;
                }
            }
            else {
                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] << '\n';
}
signed main() {
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int t = 1 ;//cin >> t;
    while(t -- )solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...