Submission #49103678


Source Code Expand

/**
 *  @the_hyp0cr1t3
 *  06.01.2024 18:16
**/
#include <bits/stdc++.h>

template <typename T>
constexpr T pow(T a, long long b) {
    T res{1};
    for (; b; b /= 2, a *= a)
        if (b & 1) res *= a;
    return res;
}

template <int P> struct modint {
    static int mod_;
    int v; // P * 2 may overflow

    constexpr modint() : v{} {}
    constexpr modint(long long u) {
        if (u < 0) u = u % mod() + mod();
        if (u >= mod()) u %= mod();
        v = u;
    }

    constexpr int val() const { return v; }
    constexpr static int mod() {
        if constexpr (P > 0)
            return P;
        else
            return mod_;
    }
    constexpr static void set_mod(int m) {
        mod_ = m;
    }
    explicit constexpr operator int() const { return v; }
    friend constexpr std::istream& operator>>(std::istream& in, modint& m) {
        long long u; in >> u;
        m = modint(u);
        return in;
    }
    friend constexpr std::ostream& operator<<(std::ostream& os, const modint& m) {
        return os << m.v;
    }

    static int inv(int a, int m) {
        int g = m, x = 0, y = 1;
        while (a != 0) {
            int q = g / a;
            g %= a;
            std::swap(g, a);
            x -= q * y;
            std::swap(x, y);
        }
        return x < 0 ? x + m : x;
    }

    constexpr static unsigned fast_mod(uint64_t x, unsigned m = mod()) {
#if !defined(_WIN32) || defined(_WIN64)
        return unsigned(x % m);
#endif  // x must be less than 2^32 * m
        unsigned x_high = unsigned(x >> 32), x_low = unsigned(x), quot, rem;
        asm("divl %4\n" : "=a"(quot), "=d"(rem) : "d"(x_high), "a"(x_low), "r"(m));
        return rem;
    }

    constexpr modint inv() const { return modint(inv(v, mod())); }
    constexpr modint operator-() const { return modint(v ? mod() - v : 0); }
    constexpr modint& operator+=(const modint& o) {
        v += o.v;
        if (v >= mod()) v -= mod();
        return *this;
    }
    constexpr modint& operator-=(const modint& o) {
        v -= o.v;
        if (v < 0) v += mod();
        return *this;
    }
    constexpr modint& operator*=(const modint& o) {
        v = fast_mod(uint64_t(v) * o.v);
        return *this;
    }
    constexpr modint& operator/=(const modint& o) { return *this *= o.inv(); }
    friend constexpr modint operator+(const modint& a, const modint& b) {
        modint res = a; res += b;
        return res;
    }
    friend constexpr modint operator-(const modint& a, const modint& b) {
        modint res = a;
        res -= b;
        return res;
    }
    friend constexpr modint operator*(const modint& a, const modint& b) {
        modint res = a;
        res *= b;
        return res;
    }
    friend constexpr modint operator/(const modint& a, const modint& b) {
        modint res = a;
        res /= b;
        return res;
    }
    friend constexpr bool operator==(const modint& a, const modint& b) {
        return a.val() == b.val();
    }
};

template <>
int modint<0>::mod_ = 1'000'000'007;

constexpr int mod = 998244353;
using Z = modint<mod>;

constexpr int B = 450;
Z add[B][B];

int main() {
    std::cin.tie(nullptr)->sync_with_stdio(false);

    int n;
    std::cin >> n;
    std::vector<int> a(n);
    for (auto &x : a)
        std::cin >> x;

    Z ans = 0;
    std::vector<Z> dp(n);
    dp[0] = 1;
    for (int i = 0; i < n; i++) {
        for (int j = 1; j < B; j++)
            dp[i] += add[j][i % j];

        if (a[i] < B) {
            add[a[i]][i % a[i]] += dp[i];
        } else {
            for (int j = i + a[i]; j < n; j += a[i])
                dp[j] += dp[i];
        }

        ans += dp[i];
    }

    std::cout << ans << '\n';
}

Submission Info

Submission Time
Task F - Hop Sugoroku
User the_hyp0cr1t3
Language C++ 20 (gcc 12.2)
Score 525
Code Size 3836 Byte
Status AC
Exec Time 178 ms
Memory 5592 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 525 / 525
Status
AC × 3
AC × 63
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt
All sample_01.txt, sample_02.txt, sample_03.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt, test_45.txt, test_46.txt, test_47.txt, test_48.txt, test_49.txt, test_50.txt, test_51.txt, test_52.txt, test_53.txt, test_54.txt, test_55.txt, test_56.txt, test_57.txt, test_58.txt, test_59.txt, test_60.txt
Case Name Status Exec Time Memory
sample_01.txt AC 1 ms 3580 KiB
sample_02.txt AC 1 ms 3500 KiB
sample_03.txt AC 1 ms 3584 KiB
test_01.txt AC 1 ms 3500 KiB
test_02.txt AC 169 ms 4928 KiB
test_03.txt AC 169 ms 4760 KiB
test_04.txt AC 169 ms 4684 KiB
test_05.txt AC 172 ms 4804 KiB
test_06.txt AC 171 ms 4760 KiB
test_07.txt AC 173 ms 4684 KiB
test_08.txt AC 174 ms 5348 KiB
test_09.txt AC 176 ms 5440 KiB
test_10.txt AC 176 ms 5348 KiB
test_11.txt AC 172 ms 5424 KiB
test_12.txt AC 172 ms 5396 KiB
test_13.txt AC 172 ms 5488 KiB
test_14.txt AC 172 ms 5440 KiB
test_15.txt AC 172 ms 5416 KiB
test_16.txt AC 172 ms 5452 KiB
test_17.txt AC 171 ms 5592 KiB
test_18.txt AC 172 ms 5424 KiB
test_19.txt AC 172 ms 5492 KiB
test_20.txt AC 172 ms 5496 KiB
test_21.txt AC 175 ms 4744 KiB
test_22.txt AC 175 ms 4852 KiB
test_23.txt AC 174 ms 4752 KiB
test_24.txt AC 174 ms 4788 KiB
test_25.txt AC 175 ms 4748 KiB
test_26.txt AC 175 ms 4772 KiB
test_27.txt AC 175 ms 4732 KiB
test_28.txt AC 175 ms 4740 KiB
test_29.txt AC 174 ms 4760 KiB
test_30.txt AC 174 ms 4832 KiB
test_31.txt AC 178 ms 5404 KiB
test_32.txt AC 177 ms 5384 KiB
test_33.txt AC 176 ms 5456 KiB
test_34.txt AC 177 ms 5492 KiB
test_35.txt AC 176 ms 5304 KiB
test_36.txt AC 176 ms 5328 KiB
test_37.txt AC 177 ms 5396 KiB
test_38.txt AC 176 ms 5460 KiB
test_39.txt AC 176 ms 5344 KiB
test_40.txt AC 177 ms 5492 KiB
test_41.txt AC 173 ms 5408 KiB
test_42.txt AC 29 ms 3944 KiB
test_43.txt AC 98 ms 4644 KiB
test_44.txt AC 131 ms 5056 KiB
test_45.txt AC 16 ms 3696 KiB
test_46.txt AC 140 ms 4912 KiB
test_47.txt AC 128 ms 4820 KiB
test_48.txt AC 111 ms 4720 KiB
test_49.txt AC 74 ms 4268 KiB
test_50.txt AC 171 ms 5588 KiB
test_51.txt AC 169 ms 4784 KiB
test_52.txt AC 169 ms 4760 KiB
test_53.txt AC 169 ms 4756 KiB
test_54.txt AC 169 ms 4716 KiB
test_55.txt AC 169 ms 4712 KiB
test_56.txt AC 170 ms 4812 KiB
test_57.txt AC 169 ms 4684 KiB
test_58.txt AC 169 ms 4832 KiB
test_59.txt AC 170 ms 4828 KiB
test_60.txt AC 169 ms 4716 KiB