6238 2023. 11. 08 12:44:30 Error42 Tömbök előállítása cpp17 Futási hiba 35/100 1.23s 521888 KiB
#include <iostream>
#include <vector>

using namespace std;

using ll = long long;

template <ll M>
struct modular {
    ll val;

    // n >= 0
    modular(const ll n) {
        if (n < M)
            val = n;
        else if (n < 2 * M)
            val = n - M;
        else
            val = n % M;
    }

    [[nodiscard]] modular operator +(const modular& rhs) const {
        return val + rhs.val;
    }

    [[nodiscard]] modular operator -(const modular& rhs) const {
        return val + M - rhs.val;
    }

    [[nodiscard]] modular operator *(const modular& rhs) const {
        return val * rhs.val;
    }

    // p >= 0
    [[nodiscard]] modular pow(const ll& p) const {
        if (p == 0)
            return 1;

        if (p % 2 == 0)
            return (*this * *this).pow(p / 2);
        else
            return *this * pow(p - 1);
    }

    [[nodiscard]] modular inv() const {
        return pow(M - 2);
    }

    [[nodiscard]] modular operator /(const modular& rhs) const {
        return *this * rhs.inv();
    }

    modular& operator +=(const modular& rhs) {
        return *this = *this + rhs;
    }

    modular& operator -=(const modular& rhs) {
        return *this = *this - rhs;
    }

    modular& operator *=(const modular& rhs) {
        return *this = *this * rhs;
    }

    modular& operator /=(const modular& rhs) {
        return *this = *this / rhs;
    }

    explicit operator ll() const {
        return val;
    }
};

template <ll M>
ostream& operator<<(ostream& os, const modular<M>& modular) {
    cout << modular.val;
    return os;
}

using mod = modular<1'000'000'007>;

ll n, m, l, r, k;

vector<mod> identity;

vector<mod> combine(vector<mod> const& a, vector<mod> const& b) {
    vector<mod> ret(m, 0);
    
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < m; j++) {
            int k = (i + j) % m;

            ret[k] += a[i] * b[j];
        }
    }

    return ret;
}

vector<mod> calc(int const n) {
    if (n == 1)
        return identity;
    else if (n % 2 == 1)
        return combine(calc(n - 1), identity);
    else {
        auto const half = calc(n / 2);
        return combine(half, half);
    }
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> n >> m >> l >> r >> k;

    identity.assign(m, 0);

    for (int i = 0; i < m; i++) {
        identity[i] += (r - i + m) / m;
        identity[i] -= (l - 1 - i + m) / m;
    }

    auto const ans = calc(n);

    cout << ans[k] << "\n";
}
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1828 KiB
2 Elfogadva 3ms 2052 KiB
3 Elfogadva 3ms 2272 KiB
subtask2 10/10
4 Elfogadva 3ms 2452 KiB
5 Elfogadva 3ms 2816 KiB
6 Elfogadva 3ms 2868 KiB
subtask3 10/10
7 Elfogadva 2ms 2952 KiB
8 Elfogadva 3ms 3076 KiB
9 Elfogadva 2ms 3160 KiB
10 Elfogadva 3ms 3296 KiB
11 Elfogadva 2ms 3384 KiB
12 Elfogadva 2ms 3388 KiB
13 Elfogadva 3ms 3572 KiB
subtask4 7/7
14 Elfogadva 3ms 3776 KiB
15 Elfogadva 3ms 3904 KiB
16 Elfogadva 3ms 4120 KiB
17 Elfogadva 3ms 4336 KiB
18 Elfogadva 2ms 4432 KiB
19 Elfogadva 2ms 4440 KiB
20 Elfogadva 3ms 4656 KiB
subtask5 8/8
21 Elfogadva 79ms 4760 KiB
22 Elfogadva 39ms 4968 KiB
23 Elfogadva 50ms 5064 KiB
24 Elfogadva 32ms 4904 KiB
25 Elfogadva 17ms 4908 KiB
26 Elfogadva 9ms 4808 KiB
27 Elfogadva 57ms 5092 KiB
28 Elfogadva 12ms 5076 KiB
29 Elfogadva 79ms 5092 KiB
30 Elfogadva 79ms 5116 KiB
subtask6 0/25
31 Futási hiba 168ms 521888 KiB
32 Futási hiba 166ms 521864 KiB
33 Hibás válasz 6ms 4964 KiB
34 Hibás válasz 6ms 5184 KiB
35 Elfogadva 6ms 5196 KiB
36 Hibás válasz 7ms 5200 KiB
37 Futási hiba 165ms 521628 KiB
38 Futási hiba 209ms 521604 KiB
39 Hibás válasz 9ms 5216 KiB
40 Hibás válasz 8ms 5316 KiB
subtask7 0/40
41 Futási hiba 209ms 521580 KiB
42 Futási hiba 167ms 521548 KiB
43 Futási hiba 211ms 521524 KiB
44 Hibás válasz 1.23s 5300 KiB
45 Futási hiba 167ms 521564 KiB
46 Hibás válasz 501ms 5272 KiB
47 Hibás válasz 773ms 5336 KiB
48 Hibás válasz 10ms 5248 KiB
49 Hibás válasz 796ms 5312 KiB
50 Futási hiba 209ms 521532 KiB