Submission #1317811

#TimeUsernameProblemLanguageResultExecution timeMemory
1317811SofiatpcKangaroo (CEOI16_kangaroo)C++20
0 / 100
0 ms332 KiB
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 2005, MOD = 1e9+7;
int dp[MAXN][MAXN];

signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    int n, ini, fim; cin>>n>>ini>>fim;

    int ans = 0;
    dp[n+1][1] = 1;
    for(int x = 0; x < 2; x++)
        for(int y = 0; y < 2; y++){
            if(x == 0 && ini == 1)continue;
            if(y == 0 && fim == 1)continue;

            int qtd = 0;
            for(int i = n; i >= 2; i--){
                if(i == ini || i == fim)qtd++;
                for(int c = 1; c <= n; c++){
                    if(i == ini){
                        if(x == 0)dp[i][c] = dp[i+1][c];
                        else dp[i][c] = dp[i+1][c+1];
                    }
                    else if(i == fim){
                        if(y == 0)dp[i][c] = dp[i+1][c];
                        else dp[i][c] = dp[i+1][c+1];   
                    }else{
                        dp[i][c] = (dp[i+1][c+1] * (c + 1 - qtd))%MOD
                        + (dp[i+1][c-1]*(c-1))%MOD;
                        dp[i][c] %= MOD;
                    }
                }
            }
            
            ans = (ans + dp[2][1])%MOD;
        }
    cout<<ans<<"\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...