Submission #563632

#TimeUsernameProblemLanguageResultExecution timeMemory
563632piOOECalvinball championship (CEOI15_teams)C++17
100 / 100
300 ms468 KiB
#include <bits/stdc++.h>

using namespace std;

#define all(x) begin(x), end(x)
#define sz(x) ((int)size(x))
#define trace(x) cout << #x << ": " << (x) << endl;

typedef long long ll;

const int mod = 1'000'007;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n;
    cin >> n;
    vector<int> a(n);
    for (int i = 0; i < n; ++i) {
        cin >> a[i];
    }
    vector<int> dp(n + 1, 1);
    int ans = 0;
    for (int i = n - 1; i > -1; --i) {
        if (i) {
            int mx = *max_element(begin(a), begin(a) + i);
            ans = (ans + dp[mx] * 1LL * (a[i] - 1)) % mod;
        }
        vector<int> dpp(n + 1);
        for (int cnt = 1; cnt <= n; ++cnt) {
            dpp[cnt] = (dp[cnt] * 1LL * cnt + (cnt < n ? dp[cnt + 1] : 0)) % mod;
        }
        swap(dp, dpp);
    }
    cout << (ans + 1) % mod;
    return 0;
}
#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...