讀入優化


對於輸入數據非常大的一些可(變)愛(態)題目,scanf就會大大拖慢程序的運行速度,cin就更不用說了,所以我們要用一種高大上的東西——讀入優化。

讀入優化的原理其實就是一個一個字符的讀入,再組成數字

==================================================================

下面貼一段讀入優化的模板

int read()
{
int x=0,f=1;
char ch;
while(ch<'0'||ch>'9') {if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return f*x;
}

前方高能預警=====

下面是dalao的讀入優化模板

template<class T>void read(T &x)
{
x=0;int f=0;char ch=getchar();
while(ch<'0'||ch>'9') {f|=(ch=='-');ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
x=f?-x:x;
return;
}

template就是讓這個函數隨時可以調用,而且可以用int、double、char……(反正很裝13就對了)

用了指針,會快更會裝13。

下面的f|=(ch'-')如果ch‘-’,f就改符號(還可以判斷多個負號),位運算,會快

<<x就相當於2^x,會非常快;

最后問號表達式裝13

總之就是一個優(裝)化(B)的讀入優化


=我是分割線======

以下的讀入優化需要在freopen條件下使用(其實用的不是很多,大多數情況用上面那種)

下面是比以上讀優都要快的julao的讀入優化(划重點)fread

inline char GET_CHAR(){
static char buf[maxn],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,maxn,stdin),p1==p2)?EOF:*p1++;
}
template<class T>void read(T &x)
{
x=0;int f=0;char ch=GET_CHAR();
while(ch<'0'||ch>'9') {f|=(ch=='-');ch=GET_CHAR();}
while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=GET_CHAR();}
x=f?-x:x;
return;
}

以上摘自讀入優化


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM