제출 #394234

#제출 시각아이디문제언어결과실행 시간메모리
394234ak2006Calvinball championship (CEOI15_teams)C++14
20 / 100
39 ms65540 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using vb = vector<bool>; using vvb = vector<vb>; using vi = vector<int>; using vvi = vector<vi>; using vl = vector<ll>; using vvl = vector<vl>; using vc = vector<char>; using vvc = vector<vc>; const ll mod = 1e9 + 7,inf = 1e18; #define pb push_back #define fast ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); int main() { int n; cin>>n; vl a(n + 1); for (int i = 1;i<=n;i++)cin>>a[i]; vvl dp(n + 1,vl(n + 1)); ll ans = 0; ll mx = 0; for (int i = n;i>=1;i--){ for (int j = n;j>=1;j--){ if (i == n){dp[i][j] = min(1ll * n,1ll * j + 1);continue;} dp[i][j] = ((1ll * j)%mod * (dp[i + 1][j])%mod)%mod; if (j != n)dp[i][j] = (dp[i][j]%mod + dp[i + 1][j + 1]%mod)%mod; } } for (int i = 1;i<=n;i++){ if (i != n){ for (int j = 1;j<a[i];j++){ ans = (ans%mod + dp[i + 1][max(mx,1ll * j)]%mod)%mod; } } else ans = (ans%mod + a[i]%mod)%mod; mx = max(mx,a[i]); } if (ans < 0)ans += mod; cout<<ans; 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...