Submission #1142742

#TimeUsernameProblemLanguageResultExecution timeMemory
1142742mnbvcxz123Calvinball championship (CEOI15_teams)C++20
70 / 100
68 ms584 KiB
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
constexpr ll N=1e4+5;
constexpr ll mod=1e6+7;

ll dp[2][N];
ll v[N];

ll add(ll a, ll b){
    a+=b;
    return a%mod;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    ll n;
    cin>>n;
    for(int i=1;i<=n;++i)cin>>v[i];
    dp[0][0]=1;
    ll mx=0,ok=0;
    for(ll i=1;i<=n;++i){
        for(ll j=2;j<=i;++j)
            dp[i&1][j]=(dp[i+1&1][j]*j+dp[i+1&1][j-1])%mod;
        if(v[i]!=1)ok=1;
        dp[i&1][0]=1;
        if(v[i]!=1)
            dp[i&1][mx]=add(dp[i&1][mx],(v[i]-1ll)*dp[i+1&1][0])%mod;
        if(ok)dp[i&1][1]=1ll;
        mx=max(mx,v[i]);
    }
    int ans=0;
    for(ll i=1;i<=n;++i)
        ans+=dp[n&1][i];
    cout<<add(ans,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...