Submission #1172779

#TimeUsernameProblemLanguageResultExecution timeMemory
1172779Dan4LifeCalvinball championship (CEOI15_teams)C++20
100 / 100
130 ms832 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define sz(a) (int)a.size() #define all(a) begin(a),end(a) using ll = long long; using ar2 = array<ll,2>; using vi = vector<int>; const int mxN = (int)1e4+10; const ll INF = (int)1e9; const ll MOD = (ll)1e6+7; ll n, mx, xd, ans=1; ll a[mxN], dp[2][mxN][2]; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cin >> n; for(int i = 0; i < n; i++) cin >> a[i], a[i]--; for(int i = 0; i < n; i++) dp[n&1][i][0]=dp[n&1][i][1]=1; for(int i = n-1,ii=(n-1)&1,pi=n&1; i>=0; i--,ii^=1,pi^=1){ for(int j = 0; j <= i; j++){ for(int sm = 0; sm <= 1; sm++){ dp[ii][j][sm] = 0; int lim = sm?n-1:a[i]; if(j+1<lim){ dp[ii][j][sm]+=dp[pi][j][1]*(j+1); dp[ii][j][sm]+=dp[pi][j+1][1]; } else{ if(lim<=j){ dp[ii][j][sm]+=dp[pi][j][1]*lim+dp[pi][j][sm]; } else{ dp[ii][j][sm]+=dp[pi][j][1]*(j+1)+dp[pi][j+1][sm]; } } dp[ii][j][sm]%=MOD; } } } cout << dp[0][0][0] << "\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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...