This documentation is automatically generated by online-judge-tools/verification-helper
#include "template/fastio.hpp"
#ifndef KK2_TEMPLATE_FASTIO_HPP
#define KK2_TEMPLATE_FASTIO_HPP 1
#include <cctype>
#include <cstdint>
#include <cstdio>
#include <fstream>
#include <iostream>
#include <string>
#include "../type_traits/integral.hpp"
#include "../type_traits/io.hpp"
namespace kk2 {
namespace fastio {
struct Scanner : type_traits::istream_tag {
private:
static constexpr size_t INPUT_BUF = 1 << 17;
size_t pos = 0, end = 0;
bool is_eof = false;
static char buf[INPUT_BUF];
FILE *fp;
public:
Scanner() : fp(stdin) {}
Scanner(const char *file) : fp(fopen(file, "r")) {}
~Scanner() {
if (fp != stdin) fclose(fp);
}
char now() {
if (is_eof) return '\0';
if (pos == end) {
end = fread(buf, 1, INPUT_BUF, fp);
if (end != INPUT_BUF) buf[end] = '\0';
if (end == 0) is_eof = true;
pos = 0;
}
return buf[pos];
}
void skip_space() {
while (isspace(now())) ++pos;
}
template <class T, is_unsigned_t<T> * = nullptr> T next_unsigned_integral() {
skip_space();
T res{};
while (isdigit(now())) {
res = res * 10 + (now() - '0');
++pos;
}
return res;
}
template <class T, is_signed_t<T> * = nullptr> T next_signed_integral() {
skip_space();
if (now() == '-') {
++pos;
return T(-next_unsigned_integral<typename to_unsigned<T>::type>());
} else return (T)next_unsigned_integral<typename to_unsigned<T>::type>();
}
char next_char() {
skip_space();
auto res = now();
++pos;
return res;
}
std::string next_string() {
skip_space();
std::string res;
while (true) {
char c = now();
if (isspace(c) or c == '\0') break;
res.push_back(now());
++pos;
}
return res;
}
template <class T, is_unsigned_t<T> * = nullptr> Scanner &operator>>(T &x) {
x = next_unsigned_integral<T>();
return *this;
}
template <class T, is_signed_t<T> * = nullptr> Scanner &operator>>(T &x) {
x = next_signed_integral<T>();
return *this;
}
Scanner &operator>>(char &x) {
x = next_char();
return *this;
}
Scanner &operator>>(std::string &x) {
x = next_string();
return *this;
}
};
struct endl_struct_t {};
struct Printer : type_traits::ostream_tag {
private:
static char helper[10000][5];
static char leading_zero[10000][5];
constexpr static size_t OUTPUT_BUF = 1 << 17;
static char buf[OUTPUT_BUF];
size_t pos = 0;
FILE *fp;
template <class T> static constexpr void div_mod(T &a, T &b, T mod) {
a = b / mod;
b -= a * mod;
}
static void init() {
buf[0] = '\0';
for (size_t i = 0; i < 10000; ++i) {
leading_zero[i][0] = i / 1000 + '0';
leading_zero[i][1] = i / 100 % 10 + '0';
leading_zero[i][2] = i / 10 % 10 + '0';
leading_zero[i][3] = i % 10 + '0';
leading_zero[i][4] = '\0';
size_t j = 0;
if (i >= 1000) helper[i][j++] = i / 1000 + '0';
if (i >= 100) helper[i][j++] = i / 100 % 10 + '0';
if (i >= 10) helper[i][j++] = i / 10 % 10 + '0';
helper[i][j++] = i % 10 + '0';
helper[i][j] = '\0';
}
}
public:
Printer() : fp(stdout) { init(); }
Printer(const char *file) : fp(fopen(file, "w")) { init(); }
~Printer() {
write();
if (fp != stdout) fclose(fp);
}
void write() {
fwrite(buf, 1, pos, fp);
pos = 0;
}
void flush() {
write();
fflush(fp);
}
void put_char(char c) {
if (pos == OUTPUT_BUF) write();
buf[pos++] = c;
}
void put_cstr(const char *s) {
while (*s) put_char(*(s++));
}
void put_u32(uint32_t x) {
uint32_t y;
if (x >= 100000000) { // 10^8
div_mod<uint32_t>(y, x, 100000000);
put_cstr(helper[y]);
div_mod<uint32_t>(y, x, 10000);
put_cstr(leading_zero[y]);
put_cstr(leading_zero[x]);
} else if (x >= 10000) { // 10^4
div_mod<uint32_t>(y, x, 10000);
put_cstr(helper[y]);
put_cstr(leading_zero[x]);
} else put_cstr(helper[x]);
}
void put_i32(int32_t x) {
if (x < 0) {
put_char('-');
put_u32(-x);
} else put_u32(x);
}
void put_u64(uint64_t x) {
uint64_t y;
if (x >= 1000000000000ull) { // 10^12
div_mod<uint64_t>(y, x, 1000000000000ull);
put_u32(y);
div_mod<uint64_t>(y, x, 100000000ull);
put_cstr(leading_zero[y]);
div_mod<uint64_t>(y, x, 10000ull);
put_cstr(leading_zero[y]);
put_cstr(leading_zero[x]);
} else if (x >= 10000ull) { // 10^4
div_mod<uint64_t>(y, x, 10000ull);
put_u32(y);
put_cstr(leading_zero[x]);
} else put_cstr(helper[x]);
}
void put_i64(int64_t x) {
if (x < 0) {
put_char('-');
put_u64(-x);
} else put_u64(x);
}
void put_u128(__uint128_t x) {
constexpr static __uint128_t pow10_10 = 10000000000ull;
constexpr static __uint128_t pow10_20 = pow10_10 * pow10_10;
__uint128_t y;
if (x >= pow10_20) { // 10^20
div_mod<__uint128_t>(y, x, pow10_20);
put_u64(uint64_t(y));
div_mod<__uint128_t>(y, x, __uint128_t(10000000000000000ull));
put_cstr(leading_zero[y]);
div_mod<__uint128_t>(y, x, __uint128_t(1000000000000ull));
put_cstr(leading_zero[y]);
div_mod<__uint128_t>(y, x, __uint128_t(100000000ull));
put_cstr(leading_zero[y]);
div_mod<__uint128_t>(y, x, __uint128_t(10000ull));
put_cstr(leading_zero[y]);
put_cstr(leading_zero[x]);
} else if (x >= __uint128_t(10000)) { // 10^4
div_mod<__uint128_t>(y, x, __uint128_t(10000));
put_u64(uint64_t(y));
put_cstr(leading_zero[x]);
} else put_cstr(helper[x]);
}
void put_i128(__int128_t x) {
if (x < 0) {
put_char('-');
put_u128(-x);
} else put_u128(x);
}
template <class T, is_unsigned_t<T> * = nullptr> Printer &operator<<(T x) {
if constexpr (sizeof(T) <= 4) put_u32(x);
else if constexpr (sizeof(T) <= 8) put_u64(x);
else put_u128(x);
return *this;
}
template <class T, is_signed_t<T> * = nullptr> Printer &operator<<(T x) {
if constexpr (sizeof(T) <= 4) put_i32(x);
else if constexpr (sizeof(T) <= 8) put_i64(x);
else put_i128(x);
return *this;
}
Printer &operator<<(char x) {
put_char(x);
return *this;
}
Printer &operator<<(const std::string &x) {
for (char c : x) put_char(c);
return *this;
}
Printer &operator<<(const char *x) {
put_cstr(x);
return *this;
}
// std::cout << std::endl; は関数ポインタを渡しているらしい
Printer &operator<<(endl_struct_t) {
put_char('\n');
flush();
return *this;
}
};
char Scanner::buf[Scanner::INPUT_BUF];
char Printer::buf[Printer::OUTPUT_BUF];
char Printer::helper[10000][5];
char Printer::leading_zero[10000][5];
} // namespace fastio
#if defined(INTERACTIVE) || defined(USE_STDIO)
auto &kin = std::cin;
auto &kout = std::cout;
auto (*kendl)(std::ostream &) = std::endl<char, std::char_traits<char>>;
#else
fastio::Scanner kin;
fastio::Printer kout;
fastio::endl_struct_t kendl;
#endif
} // namespace kk2
#endif // KK2_TEMPLATE_FASTIO_HPP
Traceback (most recent call last):
File "/opt/hostedtoolcache/Python/3.12.0/x64/lib/python3.12/site-packages/onlinejudge_verify/documentation/build.py", line 71, in _render_source_code_stat
bundled_code = language.bundle(stat.path, basedir=basedir, options={'include_paths': [basedir]}).decode()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/hostedtoolcache/Python/3.12.0/x64/lib/python3.12/site-packages/onlinejudge_verify/languages/cplusplus.py", line 187, in bundle
bundler.update(path)
File "/opt/hostedtoolcache/Python/3.12.0/x64/lib/python3.12/site-packages/onlinejudge_verify/languages/cplusplus_bundle.py", line 401, in update
self.update(self._resolve(pathlib.Path(included), included_from=path))
File "/opt/hostedtoolcache/Python/3.12.0/x64/lib/python3.12/site-packages/onlinejudge_verify/languages/cplusplus_bundle.py", line 312, in update
raise BundleErrorAt(path, i + 1, "#pragma once found in a non-first line")
onlinejudge_verify.languages.cplusplus_bundle.BundleErrorAt: type_traits/integral.hpp: line 4: #pragma once found in a non-first line