Submission #346543

#TimeUsernameProblemLanguageResultExecution timeMemory
346543Ca7Ac1A Huge Tower (CEOI10_tower)C++17
30 / 100
181 ms88300 KiB
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
#include <map>

#define ll signed long long

using namespace std;

const ll MOD = (ll)10e9 + 9;

vector<ll> mem(10e6, -1);

bool cmpr(ll a, ll b)
{
    return a > b;
}

ll factorial(ll n)
{
    if (mem[n] == -1)
    {
        mem[n] = (n * factorial(n - 1)) % MOD;
    }

    return mem[n];
}

int main()
{
    cin.tie(0);
    cout.tie(0);
    ios_base::sync_with_stdio(0);
    //freopen("tower.in", "r", stdin);

    mem[0] = 1;
    mem[1] = 1;

    ll N;
    ll D;
    cin >> N >> D;

    vector<ll> blocks(N, 0);
    for (ll i = 0; i < N; i++)
    {
        cin >> blocks[i];
    }

    sort(blocks.begin(), blocks.end(), cmpr);

    vector<ll> possible(N, 1);
    ll sum = 1;
    ll j = 0;
    for (ll i = 0; i < N; i++)
    {
        j = max(j, i);
        sum = 1;
        while (j < N - 1 && blocks[i] - blocks[j + 1] <= D)
        {
            j++;
            sum *= j - i + 1;
            sum %= MOD;
        }

        possible[i] = sum;
    }

    ll sol = 1;
    for (ll mult : possible)
    {
        sol *= mult;
        sol %= MOD;
    }

    cout << sol;
}
#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...
#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...