Submission #251130

#TimeUsernameProblemLanguageResultExecution timeMemory
251130SortingCalvinball championship (CEOI15_teams)C++17
20 / 100
130 ms65540 KiB
#include <bits/stdc++.h> using namespace std; const int k_N = 1e4 + 3; const long long k_Mod = 1e9 + 7; int n, a[k_N]; pair<int, bool> dp[k_N][k_N][2]; int solve(int pos, int cnt, bool equal){ if(pos == n) return 1; auto &[ans, solved] = dp[pos][cnt][equal]; if(solved) return ans; solved = true; ans = 0; if(!equal){ ans = (((long long)solve(pos + 1, cnt, false)) * (long long)cnt + (long long)solve(pos + 1, cnt + 1, false)) % k_Mod; return ans; } ans = (((long long)solve(pos + 1, cnt, false)) * (long long)min(cnt, a[pos] - 1)) % k_Mod; if(a[pos] <= cnt) ans += solve(pos + 1, cnt, true); else if(a[pos] == cnt + 1) ans += solve(pos + 1, cnt + 1, true); else if(a[pos] > cnt + 1) ans += solve(pos + 1, cnt + 1, false); ans %= k_Mod; return ans; } int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cin >> n; for(int i = 0; i < n; ++i) cin >> a[i]; cout << solve(0, 0, true) << "\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...