5个点都RE求助

P2256 一中校运会之百米跑

@[wyhnet](/user/527425) 你`string`用`scanf`?
by Ruiqun2009 @ 2022-07-20 14:59:23


@[Ruiqun2009](/user/589895) 感谢指教(小声bb:ios::sync_with_stdio(0)挺快的)
by wyhnet @ 2022-07-20 15:03:31


@[wyhnet](/user/527425) 带火车头的快读,能不比`cin`快吗? ```cpp #define GCC optimize("Ofast") #define GCC optimize("inline") #define GCC optimize("-fgcse") #define GCC optimize("-fgcse-lm") #define GCC optimize("-fipa-sra") #define GCC optimize("-ftree-pre") #define GCC optimize("-ftree-vrp") #define GCC optimize("-fpeephole2") #define GCC optimize("-ffast-math") #define GCC optimize("-fsched-spec") #define GCC optimize("unroll-loops") #define GCC optimize("-falign-jumps") #define GCC optimize("-falign-loops") #define GCC optimize("-falign-labels") #define GCC optimize("-fdevirtualize") #define GCC optimize("-fcaller-saves") #define GCC optimize("-fcrossjumping") #define GCC optimize("-fthread-jumps") #define GCC optimize("-funroll-loops") #define GCC optimize("-fwhole-program") #define GCC optimize("-freorder-blocks") #define GCC optimize("-fschedule-insns") #define GCC optimize("inline-functions") #define GCC optimize("-ftree-tail-merge") #define GCC optimize("-fschedule-insns2") #define GCC optimize("-fstrict-aliasing") #define GCC optimize("-fstrict-overflow") #define GCC optimize("-falign-functions") #define GCC optimize("-fcse-skip-blocks") #define GCC optimize("-fcse-follow-jumps") #define GCC optimize("-fsched-interblock") #define GCC optimize("-fpartial-inlining") #define GCC optimize("no-stack-protector") #define GCC optimize("-freorder-functions") #define GCC optimize("-findirect-inlining") #define GCC optimize("-frerun-cse-after-loop") #define GCC optimize("inline-small-functions") #define GCC optimize("-finline-small-functions") #define GCC optimize("-ftree-switch-conversion") #define GCC optimize("-foptimize-sibling-calls") #define GCC optimize("-fexpensive-optimizations") #define GCC optimize("-funsafe-loop-optimizations") #define GCC optimize("-fdelete-null-pointer-checks") #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2") #include <algorithm> #include <array> #include <bitset> #include <cassert> #include <climits> #include <cmath> #include <functional> #include <iostream> #include <limits> #include <list> #include <map> #include <memory> #include <numeric> #include <queue> #include <random> #include <set> #include <sstream> #include <stack> #include <string.h> #include <type_traits> #include <unordered_map> #include <unordered_set> #define inline inline __attribute__((always_inline)) namespace OY { #define cin OY::inputHelper<1024, 20>::getInstance() #define getchar() ({char c=cin.getChar_Checked();cin.next();c;}) #define cout OY::outputHelper<1048576>::getInstance() #define putchar cout.putChar #define endl '\n' #define putlog(...) OY::printLog(", ", __VA_ARGS__) template <uint64_t _BufferSize = 1024, uint64_t _BlockSize = 20> class inputHelper { FILE *m_filePtr; char m_buf[_BufferSize], *m_end, *m_cursor; bool m_ok; void flush() { uint64_t a = m_end - m_cursor; if (a >= _BlockSize) return; memmove(m_buf, m_cursor, a); uint64_t b = fread(m_buf + a, 1, _BufferSize - a, m_filePtr); m_cursor = m_buf; if (a + b < _BufferSize) { m_end = m_buf + a + b; *m_end = EOF; } } public: explicit inputHelper(const char *inputFileName) : m_ok(true) { if (!*inputFileName) m_filePtr = stdin; else m_filePtr = fopen(inputFileName, "rt"); m_end = m_cursor = m_buf + _BufferSize; } ~inputHelper() { fclose(m_filePtr); } static inputHelper<_BufferSize, _BlockSize> &getInstance() { #ifdef OY_LOCAL static inputHelper<_BufferSize, _BlockSize> s_obj("in.txt"); #else static inputHelper<_BufferSize, _BlockSize> s_obj(""); #endif return s_obj; } static constexpr bool isBlank(char c) { return c == ' ' || c == '\t' || c == '\n' || c == '\r'; } static constexpr bool isEndline(char c) { return c == '\n' || c == EOF; } const char &getChar_Checked() { if (m_cursor < m_end) return *m_cursor; uint64_t b = fread(m_buf, 1, _BufferSize, m_filePtr); m_cursor = m_buf; if (b < _BufferSize) { m_end = m_buf + b; *m_end = EOF; } return *m_cursor; } const char &getChar_Unchecked() const { return *m_cursor; } void next() { ++m_cursor; } void setState(bool _ok) { m_ok = _ok; } template <typename _Tp, std::enable_if_t<std::is_signed_v<_Tp> & std::is_integral_v<_Tp>> * = nullptr> inputHelper<_BufferSize, _BlockSize> &operator>>(_Tp &ret) { while (isBlank(getChar_Checked())) next(); flush(); if (getChar_Unchecked() == '-') { next(); if (isdigit(getChar_Unchecked())) { ret = -(getChar_Unchecked() - '0'); while (next(), isdigit(getChar_Unchecked())) ret = ret * 10 - (getChar_Unchecked() - '0'); } else m_ok = false; } else { if (isdigit(getChar_Unchecked())) { ret = getChar_Unchecked() - '0'; while (next(), isdigit(getChar_Unchecked())) ret = ret * 10 + (getChar_Unchecked() - '0'); } else m_ok = false; } return *this; } template <typename _Tp, std::enable_if_t<std::is_unsigned_v<_Tp> & std::is_integral_v<_Tp>> * = nullptr> inputHelper<_BufferSize, _BlockSize> &operator>>(_Tp &ret) { while (isBlank(getChar_Checked())) next(); flush(); if (isdigit(getChar_Unchecked())) { ret = getChar_Unchecked() - '0'; while (next(), isdigit(getChar_Unchecked())) ret = ret * 10 + (getChar_Unchecked() - '0'); } else m_ok = false; return *this; } template <typename _Tp, std::enable_if_t<std::is_floating_point_v<_Tp>> * = nullptr> inputHelper<_BufferSize, _BlockSize> &operator>>(_Tp &ret) { bool neg = false, integer = false, decimal = false; while (isBlank(getChar_Checked())) next(); flush(); if (getChar_Unchecked() == '-') { neg = true; next(); } if (!isdigit(getChar_Unchecked()) && getChar_Unchecked() != '.') { m_ok = false; return *this; } if (isdigit(getChar_Unchecked())) { integer = true; ret = getChar_Unchecked() - '0'; while (next(), isdigit(getChar_Unchecked())) ret = ret * 10 + (getChar_Unchecked() - '0'); } if (getChar_Unchecked() == '.') { next(); if (isdigit(getChar_Unchecked())) { if (!integer) ret = 0; decimal = true; _Tp unit = 0.1; ret += unit * (getChar_Unchecked() - '0'); while (next(), isdigit(getChar_Unchecked())) { unit *= 0.1; ret += unit * (getChar_Unchecked() - '0'); } } } if (!integer && !decimal) m_ok = false; else if (neg) ret = -ret; return *this; } inputHelper<_BufferSize, _BlockSize> &operator>>(char &ret) { while (isBlank(getChar_Checked())) next(); ret = getChar_Checked(); next(); return *this; } inputHelper<_BufferSize, _BlockSize> &operator>>(std::string &ret) { while (isBlank(getChar_Checked())) next(); if (getChar_Checked() != EOF) { ret.clear(); do { ret += getChar_Checked(); next(); } while (!isBlank(getChar_Checked()) && getChar_Unchecked() != EOF); } else m_ok = false; return *this; } explicit operator bool() { return m_ok; } }; template <uint64_t _BufferSize = 1048576> class outputHelper { FILE *m_filePtr = nullptr; char m_buf[_BufferSize], *m_end, *m_cursor; char m_tempBuf[50], *m_tempBufCursor, *m_tempBufDot; uint64_t m_floatReserve, m_floatRatio; public: outputHelper(const char *outputFileName, int prec = 6) : m_end(m_buf + _BufferSize) { if (!*outputFileName) m_filePtr = stdout; else m_filePtr = fopen(outputFileName, "wt"); m_cursor = m_buf; m_tempBufCursor = m_tempBuf; precision(prec); } static outputHelper<_BufferSize> &getInstance() { #ifdef OY_LOCAL static outputHelper<_BufferSize> s_obj("out.txt"); #else static outputHelper<_BufferSize> s_obj(""); #endif return s_obj; } ~outputHelper() { flush(); fclose(m_filePtr); } void precision(int prec) { m_floatReserve = prec; m_floatRatio = pow(10, prec); m_tempBufDot = m_tempBuf + prec; } outputHelper<_BufferSize> &flush() { fwrite(m_buf, 1, m_cursor - m_buf, m_filePtr); fflush(m_filePtr); m_cursor = m_buf; return *this; } void putChar(const char &c) { if (m_cursor == m_end) flush(); *m_cursor++ = c; } void putS(const char *c) { while (*c) putChar(*c++); } template <typename _Tp, std::enable_if_t<std::is_signed_v<_Tp> & std::is_integral_v<_Tp>> * = nullptr> outputHelper<_BufferSize> &operator<<(const _Tp &ret) { _Tp _ret = _Tp(ret); if (_ret >= 0) { do { *m_tempBufCursor++ = '0' + _ret % 10; _ret /= 10; } while (_ret); do putChar(*--m_tempBufCursor); while (m_tempBufCursor > m_tempBuf); } else { putChar('-'); do { *m_tempBufCursor++ = '0' - _ret % 10; _ret /= 10; } while (_ret); do putChar(*--m_tempBufCursor); while (m_tempBufCursor > m_tempBuf); } return *this; } template <typename _Tp, std::enable_if_t<std::is_unsigned_v<_Tp> & std::is_integral_v<_Tp>> * = nullptr> outputHelper<_BufferSize> &operator<<(const _Tp &ret) { _Tp _ret = _Tp(ret); do { *m_tempBufCursor++ = '0' + _ret % 10; _ret /= 10; } while (_ret); do putChar(*--m_tempBufCursor); while (m_tempBufCursor > m_tempBuf); return *this; } template <typename _Tp, std::enable_if_t<std::is_floating_point_v<_Tp>> * = nullptr> outputHelper<_BufferSize> &operator<<(const _Tp &ret) { if (ret < 0) { putChar('-'); return *this << -ret; } _Tp _ret = ret * m_floatRatio; uint64_t integer = _ret; if (_ret - integer >= 0.4999999999) integer++; do { *m_tempBufCursor++ = '0' + integer % 10; integer /= 10; } while (integer); if (m_tempBufCursor > m_tempBufDot) { do putChar(*--m_tempBufCursor); while (m_tempBufCursor > m_tempBufDot); putChar('.'); } else { putS("0."); for (int i = m_tempBufDot - m_tempBufCursor; i--;) putChar('0'); } do putChar(*--m_tempBufCursor); while (m_tempBufCursor > m_tempBuf); return *this; } outputHelper<_BufferSize> &operator<<(const char &ret) { putChar(ret); return *this; } outputHelper<_BufferSize> &operator<<(const std::string &ret) { putS(ret.data()); return *this; } }; template <uint64_t _BufferSize, uint64_t _BlockSize> inputHelper<_BufferSize, _BlockSize> &getline(inputHelper<_BufferSize, _BlockSize> &ih, std::string &ret) { ret.clear(); if (ih.getChar_Checked() == EOF) ih.setState(0); else { while (!inputHelper<_BufferSize, _BlockSize>::isEndline(ih.getChar_Checked())) { ret += ih.getChar_Unchecked(); ih.next(); } ih.next(); } return ih; } template <typename D, typename T, typename... S> void printLog(D delim, const T &x, S... rest) { cout << x; if constexpr (sizeof...(rest) > 0) { cout << delim; printLog(delim, rest...); } } } using OY::getline; ```
by Ruiqun2009 @ 2022-07-20 15:04:34


@[Ruiqun2009](/user/589895) 蒟蒻膜拜大神
by wyhnet @ 2022-07-20 15:10:01


|