This documentation is automatically generated by competitive-verifier/competitive-verifier
#include "lib/random/xoshiro128.hpp"#pragma once
#include <array>
#include <bit>
#include <cstdint>
#include <limits>
#include <utility>
#include "random/split_mix_64.hpp"
/// @brief 疑似乱数生成器 xoshiro128++
struct xoshiro128 {
using state_type = std::array<std::uint32_t, 4>;
using result_type = std::uint32_t;
constexpr xoshiro128() : state() {
split_mix_64 split_mix{};
for (auto &s : state) s = static_cast<std::uint32_t>(split_mix());
}
constexpr xoshiro128(std::uint64_t seed) noexcept : state() {
split_mix_64 split_mix{seed};
for (auto &s : state) s = static_cast<std::uint32_t>(split_mix());
}
static constexpr result_type min() noexcept { return std::numeric_limits<result_type>::min(); }
static constexpr result_type max() noexcept { return std::numeric_limits<result_type>::max(); }
constexpr result_type operator()() {
const std::uint32_t result = std::rotl(state[0] + state[3], 7) + state[0];
const std::uint32_t t = state[1] << 9;
state[2] ^= state[0];
state[3] ^= state[1];
state[1] ^= state[2];
state[0] ^= state[3];
state[2] ^= t;
state[3] = std::rotl(state[3], 11);
return result;
}
bool operator==(const xoshiro128 &rhs) noexcept { return (state == rhs.state); }
bool operator!=(const xoshiro128 &rhs) noexcept { return (state != rhs.state); }
constexpr state_type serialize() const noexcept { return state; }
constexpr void deserialize(const state_type &data) noexcept { state = data; }
constexpr void deserialize(state_type &&data) noexcept { state = std::move(data); }
/// @brief a以上b以下の整数を生成
/// @return uint32_t [a, b]
std::uint32_t rand_range(std::uint32_t a, std::uint32_t b) {
if (a == xoshiro128::min() && b == xoshiro128::max()) return operator()();
return a + operator()() % (b - a + 1);
}
/// @brief 0.0以上1.0未満の浮動小数点数を生成
/// @return double [0, 1)
double random() { return (double)operator()() / max(); }
private:
state_type state;
};
Traceback (most recent call last):
File "/home/runner/.local/lib/python3.12/site-packages/competitive_verifier/oj/resolver.py", line 291, in resolve
bundled_code = language.bundle(path, basedir=basedir)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/runner/.local/lib/python3.12/site-packages/competitive_verifier/oj/verify/languages/cplusplus.py", line 242, in bundle
bundler.update(path)
File "/home/runner/.local/lib/python3.12/site-packages/competitive_verifier/oj/verify/languages/cplusplus_bundle.py", line 479, in update
self._resolve(pathlib.Path(included), included_from=path)
File "/home/runner/.local/lib/python3.12/site-packages/competitive_verifier/oj/verify/languages/cplusplus_bundle.py", line 286, in _resolve
raise BundleErrorAt(path, -1, "no such header")
competitive_verifier.oj.verify.languages.cplusplus_bundle.BundleErrorAt: random/split_mix_64.hpp: line -1: no such header