Submission #550638

#TimeUsernameProblemLanguageResultExecution timeMemory
550638Vladth11Calvinball championship (CEOI15_teams)C++14
20 / 100
930 ms752 KiB
#include <bits/stdc++.h> #define debug(x) cerr << #x << " " << x << "\n" #define debugs(x) cerr << #x << " " << x << " " using namespace std; typedef long long ll; typedef pair <int, int> pii; const ll NMAX = 10001; const ll VMAX = 10001; const ll INF = (1LL << 55); const ll MOD = 1000007; const ll BLOCK = 1000000; const ll base = 1000000001; const ll nr_of_bits = 18; int dp[3][NMAX][3]; int v[NMAX]; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n, i, j; cin >> n; for(i = 1; i <= n; i++){ cin >> v[i]; } dp[0][0][1] = 1; int sum = 0; for(i = 1; i <= n; i++){ int act = i&1; int last = 1 - act; for(j = 1; j <= i; j++){ /// Nu deschid culoare noua dp[act][j][0] = (dp[last][j][0] * j) % MOD; dp[act][j][0] += (dp[last][j][1] * min(j, v[i] - 1)) % MOD; dp[act][j][0] %= MOD; if(j >= v[i]) dp[act][j][1] = dp[last][j][1]; dp[act][j][2] = (dp[last][j][2] * j) % MOD; dp[act][j][2] += (dp[last][j][1] * max(0, j - v[i])) % MOD; dp[act][j][2] %= MOD; /// Deschid o culoare noua dp[act][j][0] += dp[last][j - 1][0]; dp[act][j][0] %= MOD; if(j < v[j]){ dp[act][j][0] += dp[last][j - 1][1]; dp[act][j][0] %= MOD; } if(j == v[i]){ dp[act][j][1] += dp[last][j - 1][1]; dp[act][j][1] %= MOD; } dp[act][j][2] += dp[last][j - 1][2]; dp[act][j][2] %= MOD; if(j > v[i]){ dp[act][j][2] += dp[last][j - 1][1] % MOD; dp[act][j][2] %= MOD; } if(i == n){ sum += dp[act][j][0]; sum %= MOD; } } for(j = 1; j <= i; j++) dp[last][j][0] = dp[last][j][1] = dp[last][j][2] = 0; } cout << sum + 1; 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...