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 |
|
|
| 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 |