Submission #1216528

#TimeUsernameProblemLanguageResultExecution timeMemory
1216528Zoli9캥거루 (CEOI16_kangaroo)C++20
100 / 100
66 ms94536 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; ll MOD=1e9+7; int main() { ios::sync_with_stdio(false); cin.tie(0); ll N, S, F; cin>>N>>S>>F; if(F<S) swap(S, F); ll diff=N-F; vector<vector<ll>> A(N+1, vector<ll>(N+1)); vector<vector<ll>> D(N+1, vector<ll>(N+1)); vector<vector<ll>> H(N+1, vector<ll>(N+1)); H[2][2]=1; ll lastsum=1; for(int n=3; n<=N; n++) { ll cursum=0; for(int j=2; j<=n; j++) { if(j==2) { if(n%2) H[n][j]=lastsum; } else { if(n%2) H[n][j]=(H[n][j-1]-H[n-1][j-1]+MOD)%MOD; else H[n][j]=(H[n][j-1]+H[n-1][j-1])%MOD; } cursum=(cursum+H[n][j])%MOD; } lastsum=cursum; } for(int i=1; i<=S; i++) { for(int j=i+1; j<=F; j++) { if(i==1) { A[i][j]=H[j+diff][j]; } else { A[i][j]=(A[i-1][j]-D[i-1][j-1]+MOD)%MOD; D[i][j]=(D[i-1][j]+A[i-1][j-1])%MOD; } } } cout<<(A[S][F]+D[S][F])%MOD<<'\n'; 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...