Submission #231013

#TimeUsernameProblemLanguageResultExecution timeMemory
231013AlexLuchianovCalvinball championship (CEOI15_teams)C++14
100 / 100
323 ms632 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <cassert>
#include <cmath>

using namespace std;

using ll = long long;
#define MIN(a, b) (((a) < (b)) ? (a) ? (b))
#define MAX(a, b) (((a) < (b)) ? (b) : (a))

int const nmax = 10000;
int const modulo = 1000007;
int v[5 + nmax], pref[5 + nmax];
int dp[5 + nmax];

int main()
{
  int n;
  cin >> n;
  for(int i = 1;i <= n; i++) {
    cin >> v[i];
    pref[i] = max(pref[i - 1], v[i]);
  }
  for(int i = 0; i <= n; i++)
    dp[i] = 1;

  ll result = 0;
  for(int i = n; 1 <= i; i--){
    for(int j = 1; j < v[i]; j++) {
      result += dp[pref[i - 1]];
      if(modulo <= result)
        result -= modulo;
    }
    for(int j = 0; j <= n; j++)
      dp[j] = (1LL * dp[j] * j + dp[j + 1]) % modulo;
  }
  cout << (result + 1) % modulo;
  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...