제출 #1030890

#제출 시각아이디문제언어결과실행 시간메모리
1030890MarwenElarbi캥거루 (CEOI16_kangaroo)C++17
100 / 100
10 ms31936 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> using namespace std; using namespace __gnu_pbds; #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #define fi first #define se second #define ll long long #define pb push_back #define ii pair<int,int> template <class T> using Tree = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; const int nax=2e3+5; const int MOD=1e9+7; #define optimise ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); long long dp[nax][nax]; int main() { optimise; int n,s,t; cin>>n>>s>>t; if(n<=2){ cout <<0<<endl; return 0; } if(s>t) swap(s,t); memset(dp,0,sizeof dp); dp[0][0] = 1; for (int i = 1; i <= n; ++i) { for (int j = 0; j <= n-i+1; ++j) { if(i<s){ dp[i][j]+= 1ll * dp[i-1][j+1] * (j+1) * (j); dp[i][j]+= (j ? dp[i-1][j-1] : 0); }else if(i==s){ dp[i][j]+= 1ll * dp[i-1][j+1] * (j+1); dp[i][j]+= dp[i-1][j]; }else if(i<t){ dp[i][j]+= 1ll * dp[i-1][j+1] * (j+1) * (j+1); dp[i][j]+= (j ? dp[i-1][j-1] : 0); }else if(i==t){ dp[i][j]+= 1ll* dp[i-1][j+1] * (j+1); dp[i][j]+= dp[i-1][j]; }else if(i>t){ dp[i][j]+= 1ll * dp[i-1][j+1] * (j+2) * (j+1); dp[i][j]+= (j ? dp[i-1][j-1] : 0); } dp[i][j]%=MOD; } } cout <<dp[n-1][0]<<endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...