제출 #1242417

#제출 시각아이디문제언어결과실행 시간메모리
1242417muhammad_ahmad캥거루 (CEOI16_kangaroo)C++20
100 / 100
44 ms55112 KiB
// #pragma GCC target ("avx2")
// #pragma GCC optimize ("O3")
// #pragma GCC optimize ("unroll-loops")

// #include <bits/stdc++.h>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <map>
#include <vector>
#include <iomanip>
#include <string>
#include <queue>
#include <set>
#include <deque>
#include <numeric>
#include <stack>
using namespace std;

#define int long long
#define endl "\n"

int dp[2005][2005][3];
const int M = 1e9 + 7;

// c++	o
// c	x
// c--	o

void solve() {
	int n, s, t; cin >> n >> s >> t;
	if (s == 1 or t == 1) dp[1][1][1] = 1;
	else dp[1][1][0] = 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 + 1][1] += dp[i][j][0];
				dp[i + 1][j + 1][1] %= M;
				dp[i + 1][j][1] += dp[i][j][0];
				dp[i + 1][j][1] %= M;
				dp[i + 1][j + 1][2] += dp[i][j][1];
				dp[i + 1][j + 1][2] %= M;
				dp[i + 1][j][2] += dp[i][j][1];
				dp[i + 1][j][2] %= M;
			}
			else {
				dp[i + 1][j + 1][0] += dp[i][j][0] * (j + 1);
				dp[i + 1][j + 1][0] %= M;
				dp[i + 1][j + 1][1] += dp[i][j][1] * (j);
				dp[i + 1][j + 1][1] %= M;
				dp[i + 1][j + 1][2] += dp[i][j][2] * (j - 1);
				dp[i + 1][j + 1][2] %= M;
				dp[i + 1][j - 1][0] += dp[i][j][0] * (j - 1);	
				dp[i + 1][j - 1][0] %= M;
				dp[i + 1][j - 1][1] += dp[i][j][1] * (j - 1);
				dp[i + 1][j - 1][1] %= M;	
				dp[i + 1][j - 1][2] += dp[i][j][2] * (j - 1);
				dp[i + 1][j - 1][2] %= M;		
			}
		}
	}
	cout << dp[n][1][2] << endl;
    return;
}

signed main() {
    // freopen("", "r", stdin);
    // freopen("", "w", stdout);	
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    cout << setprecision(9);
    srand(time(0));

    int tc = 1;
    // cin >> tc;
    while (tc--) {
        solve();
    }
    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...