Submission #251133

#TimeUsernameProblemLanguageResultExecution timeMemory
251133SortingCalvinball championship (CEOI15_teams)C++14
20 / 100
935 ms632 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]; int dp[2][k_N][2]; int solve(int pos, int cnt, bool equal){ if(pos == n) return 1; return dp[pos & 1][cnt][equal]; } int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cin >> n; for(int i = 0; i < n; ++i) cin >> a[i]; for(int pos = n - 1; pos >= 0; --pos){ for(int cnt = 0; cnt < n; ++cnt){ for(short equal = 0; equal <= 1; ++equal){ auto &ans = dp[pos & 1][cnt][equal]; 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; continue; } 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; } } } 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...