= Vain学习(C/C++ acm算法 python Linux Golang)的个人网站 =

bbb群主的快读板子

Posted on

ios对cin的加速欺骗了我,md数据量稍微大一点就TLE了,不太靠谱,搞一波bbb群主的快读板子,用于对付卡常用,虽然一般感觉用不到叭,scanf够用了,但搞上一波没啥坏处

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
using namespace std;
typedef long long ll;

#define repi(i,b,e) for (int i = (b), _ = (e); i < _; ++i)
#define rep(i,b,e) for (int i = (b), _ = (e); i <= _; ++i)
#define repr(i,b,e) for (int i = (b), _ = (e); i >= _; --i)
#define repit(t,i,c) for (t i = (c).begin(); i != (c).end(); ++i)

template <typename T>
T& up_mx(T& v, T nv)
{
if (v < nv) v = nv;
return v;
}

template <typename T>
T& up_mn(T& v, T nv)
{
if (v > nv) v = nv;
return v;
}

static int sc_ret = 0;
struct _sp
{
_sp& operator >> (char& v) { sc_ret = scanf(" %c", &v); return *this; }
_sp& operator >> (int& v) { sc_ret = scanf("%d", &v); return *this; }
_sp& operator >> (unsigned& v) { sc_ret = scanf("%u", &v); return *this; }
_sp& operator >> (double& v) { sc_ret = scanf("%lf", &v); return *this; }
_sp& operator >> (char* v) { sc_ret = scanf("%s", v); return *this; }
_sp& operator >> (string& v) { sc_ret = (bool)(cin >> v); return *this; }
_sp& operator >> (ll& v) { sc_ret = read(v); return *this; }
_sp& ch(char& v) { v = sc_ret = getchar(); return *this; }
_sp& gets(char* v) { sc_ret = fgets(v, INT_MAX, stdin) != 0; v[strlen(v) - 1] = 0; return *this; }
operator bool() const { return sc_ret > 0; }
template <typename T>
int read(T& v)
{
T k = 1; v = 0;
int c = getchar();
while (c < '0' || c > '9')
{
if (c == '-') k = 0;
c = getchar();
}
while (c >= '0' && c <= '9') v = (v << 3) + (v << 1) + (c - 48), c = getchar();
if (k == 0) v = -v;
return c;
}
_sp& operator<<(char v) { putchar(v); return *this; }
_sp& operator<<(int v) { printf("%d", v); return *this; }
_sp& operator<<(unsigned v) { printf("%u", v); return *this; }
_sp& operator<<(double v) { printf("%.2f", v); return *this; }
_sp& operator()(const char* fmt, double v) { printf(fmt, v); return *this; }
_sp& operator<<(const char* v) { printf("%s", v); return *this; }
_sp& operator<<(string v) { printf("%s", v.c_str()); return *this; }
_sp& operator<<(ll v) { write(v); return *this; }
void flush() { fflush(stdout); }
template <typename T>
void write(T v)
{
int cnt = 0; char c[23];
if (v == 0) { putchar('0'); return; }
if (v < 0) putchar('-'), v = -v;
while (v) c[++cnt] = (v % 10) + 48, v /= 10;
while (cnt > 0) putchar(c[cnt--]);
}
}io;
struct fastio
{ fastio() { cin.tie(0); ios::sync_with_stdio(0); } }fio;
namespace cio
{ _sp& qin = io; _sp& qout = io; char nl = '\n'; }
namespace cppio
{ istream& qin = std::cin; ostream& qout = std::cout; char nl = '\n'; }
using namespace cio;

template <typename T>
void arrln(T* arr, int size, char split = ' ')
{
if (size > 0)
{
qout << arr[0];
for (int i = 1; i < size; ++i)
qout << split, qout << arr[i];
}
qout << '\n';
}