Submission #1307262

#TimeUsernameProblemLanguageResultExecution timeMemory
1307262HoriaHaivasCalvinball championship (CEOI15_teams)C++20
70 / 100
52 ms16724 KiB
#include<bits/stdc++.h>
#define debug(x) cerr << #x << " " << x << "\n"
#define debugs(x) cerr << #x << " " << x << " "
#pragma GCC optimize("Ofast")
#define int long long

using namespace std;

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

int range_rng(int l, int r)
{
    return uniform_int_distribution<int>(l,r)(rng);
}

const int mod=1e6+7;
int dp[1005][1005][2];
int n;
vector<int> v;

void modit(int &x)
{
    if (x>=mod)
        x-=mod;
}

int smaller(vector<int> &v)///il fac strict (cred)
{
    int i,j,ans;
    dp[0][0][1]=1;
    for (i=1;i<=n;i++)
    {
         for (j=1;j<=n;j++)
         {
              dp[i][j][0]+=(dp[i-1][j][0]*j)%mod;
              modit(dp[i][j][0]);
              dp[i][j][0]+=(dp[i-1][j-1][0]);
              modit(dp[i][j][0]);
              dp[i][j][0]+=(dp[i-1][j][1]*(v[i]-1))%mod;
              modit(dp[i][j][0]);
              if (v[i]<=j)
              dp[i][j][1]+=(dp[i-1][j][1]);
              if (v[i]==j)
              dp[i][j][1]+=(dp[i-1][j-1][1]);
              modit(dp[i][j][1]);
         }
    }
    ans=0;
    for(j=1;j<=n;j++)
    {
        ans+=dp[n][j][0];
        modit(ans);
    }
    return ans;
}


signed main()
{
    /*
    ifstream fin("arbore.in");
    ofstream fout("arbore.out");
    */
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int i,x;
    cin >> n;
    v.push_back(0);
    for (i=1;i<=n;i++)
    {
         cin >> x;
         v.push_back(x);
    }
    cout << (smaller(v)+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...