#define usefasterread 1
#define rg register
#define inl inline
#define debug printf("qwq\n")
#define debugd(x) printf("var %s is %lld", #x, ll(x))
#define debugf(x) printf("var %s is %llf", #x, double(x))
#define putln putchar('\n')
#define putsp putchar(' ')
#define rep(a, s, t) for(rg int a = s; a <= t; a++)
#define repdown(a, t, s) for(rg int a = t; a >= s; a--)
typedef
long
long ll;
typedef
unsigned
long
long ull;
#include
#if usefasterread
char in[
1<<20]
,*ss = in,
*tt = in;
#define getchar() (ss == tt && (tt = (ss = in) + fread(in, 1, 1 << 20, stdin), ss == tt) ? eof : *ss++)
#endif
namespace io
inl ll read()
inl void
write
(ll x)
if(x >=10)
write
(x /10)
;putchar
(x %10+
'0');}
inl void
writeln
(ll x)
inl void
writesp
(ll x)
}using
namespace io;
template
<
typename t>
inline t max
(const t& x,
const t& y)
template
<
typename t>
inline t min
(const t& x,
const t& y)
template
<
typename t>
inline
void
swap
(t& x, t& y)
template
<
typename t>
inline t abs
(const t& x)
struct io
voidrs(
)template
<
typename t>
inline io r
(t& x)
const
template
<
typename t>
inline io w
(t x)
const
if(x >=10)
w(x /10)
;putchar
(x %10+
'0')
;return
*this;}
template
<
typename t>
inline io wl
(const t& x)
const
template
<
typename t>
inline io ws
(const t& x)
const
inline io l()
inline io s()
}io;
只要在基本的快讀前加上
#define getchar() (tt == ss && (tt = (ss = in) + fread(in, 1, 1 << 20, stdin), ss == tt) ? eof : *ss++)
char in[
1<<20]
,*ss=in,
*tt=in;
in:用來快取輸入的東西的乙個緩衝區
ss:指向當前讀到的元素
tt:指向緩衝區的末尾
重定義的getchar()
函式詳解:
1)若ss!=tt
,代表緩衝區還沒讀完,直接返回*ss
,然後再ss++
即可
2)若ss==tt
,代表緩衝區已經讀完
此時將ss
重新賦值為in
,然後tt
賦值為ss+讀入了的元素個數
a.若此時還是ss==tt
,說明讀入的字元個數為0,讀不出東西了,到了檔案末尾,返回eof
(檔案末尾識別符號)
b.否則返回*ss
,然後再ss++
即可
此快讀使用注意:
1)這個快讀的效率不知道比系統自帶的getchar()
高多少2333
2)根據題目所給的空間注意char in
的大小,不要mle了!
3)此快讀一般用於檔案讀寫。若要使用控制台,則應該在輸入所有資料後使用ctrl+z
輸入eof
4)考場上如果寫不對不如不寫,反正沒有哪個出題人喪心病狂到卡起了系統自帶的getchar()
。
5)使用了這個快讀,就不能用系統自帶的getchar(),scanf(),cin
之類的輸入方法了(因為它是搬運檔案內容,一次搬一堆)
C 快讀快寫模板
感謝 eason ac 的指點,快讀 快寫將可以支援任意整型變數的輸入與輸出。由於快讀和快寫需要用到標頭檔案中的getchar 和putchar 函式,所以在 的開頭 入如下 include函式支援變數型別多樣,請在呼叫read 函式時在read與 之間加入 您要讀入的變數型別 例 int a re...
技巧 快讀快寫
inline int read 輸入方式 int main template inline void read t x for x 0 isdigit ch ch getchar x x 10 ch 0 if sign x x 輸入方式 int main inline char nc inline ...
快讀快寫 模板
include include include using namespace std int read while isdigit ch return s f void write int x if x 9 write x 10 putchar x 10 0 return int main 一些問...