Submission #210773

#TimeUsernameProblemLanguageResultExecution timeMemory
210773johuthaCalvinball championship (CEOI15_teams)C++14
80 / 100
1067 ms764 KiB
#include <iostream> #include <vector> #include <algorithm> #define int int64_t #define MOD (int)(1e6+7) using namespace std; signed main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; vector<int> ip(n); for (int i = 0; i < n; i++) { cin >> ip[i]; } vector<int> dp(n + 1); vector<int> st(n + 1); st[0] = 1; vector<int> oldst; int last = n; int res = 0; for (int i = n - 1; i >= 0; i--) { int mmax = 0; for (int j = 0; j < i; j++) mmax = max(mmax, ip[j]); for (int j = last; j >= mmax + 1; j--) { oldst = st; dp = vector<int>(n + 1, 0); st = vector<int>(n + 1, 0); st[0] = 1; for (int i = 1; i <= n; i++) { dp[i] = (dp[i - 1] + oldst[i - 1]) * j; st[i] = dp[i - 1] + oldst[i - 1]; dp[i] %= MOD; st[i] %= MOD; } /* cerr << j << ": "; for (int i = 0; i <= n; i++) { cout << dp[i] << " "; } cout << " "; for (int i = 0; i <= n; i++) { cout << st[i] << " "; } cout << " "; for (int i = 0; i <= n; i++) { cout << oldst[i] << " "; } */ } // cout << "\n"; last = mmax; int base = ip[i] - 1; for (int j = n - i - 1; j >= 0; j--) { // cerr << i << " " << j << " " << base << "\n"; res += base*st[j]; base *= mmax; base %= MOD; res %= MOD; } } cout << (res + 1) << "\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...