序:
相信不少OIer在讀取大量數據的時候廣泛採起讀入優化的方式讀入(代碼以下,基本相似):markdown
inline void read()//無符號型
{
static char c;
input = 0;
c = getchar();
while(c < '0' || c > '9') c = getchar();
while(c >= '0' && c <= '9')
{
input = input*10+c-'0';
c = getchar();
}
//return input;
return ;
}
經過其餘博客咱們發現比這樣更快的是fread,惋惜不會用…
通過尋找,在知乎上找到了比讀入優化更快的方法。
測試代表比讀入優化快10%。測試
代碼以下:優化
char buffer[maxn],*S,*T;
inline char Get_Char()
{
if(S==T)
{
T=(S=buffer)+fread(buffer,1,maxn,stdin);
if(S==T) return EOF;
}
return *S++;
}
int Get_Int()
{
char c;
int re=0;
for(c=Get_Char();c<'0'||c>'9';c=Get_Char());
while(c>='0'&&c<='9')
re=(re<<1)+(re<<3)+(c-'0'),c=Get_Char();
return re;
}
對比讀入優化讀入一千萬個的無符號型int型整數(循環10次)。
結果以下:
5.778000 0.577800(傳統)
5.078000 0.507800(新)spa
在知乎上的討論還給出了幾種很快的讀入方式,可是代碼格式比較混亂或太長,故不附代碼。
原答案地址:如何看待在OI/ACM賽事廣爲使用的快速讀入整數?code
自此整理結束。
箜瑟_qi 2017.04.15 17:21get