Submission #605469

#TimeUsernameProblemLanguageResultExecution timeMemory
605469sofapudenKangaroo (CEOI16_kangaroo)C++14
100 / 100
24 ms31820 KiB
#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

const int mxN = 2e3+5;
const int MOD = 1e9+7;

ll dp[mxN][mxN];
int n, cs, cf;

int main(){
	cin >> n >> cs >> cf;
	cs--, cf--;
	memset(dp,0,sizeof dp);
	dp[1][1] = 1;
	for(int i = 1; i < n;  ++i){
		for(int j = 1; j <= i; ++j){
			if(i == cs || i == cf){
				dp[i+1][j]+=dp[i][j];
				dp[i+1][j]%=MOD;
				dp[i+1][j+1]+=dp[i][j];
				dp[i+1][j+1]%=MOD;
			}
			else {
				dp[i+1][j-1]+=dp[i][j]*(j-1);
				dp[i+1][j-1]%=MOD;
				dp[i+1][j+1]+=(dp[i][j]*(j+1-(i>cs)-(i>cf)));
				dp[i+1][j+1]%=MOD;
			}
		}
	}
	cout << dp[n][1] << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...