转载请注明出处:http://blog.csdn.net/a1dark
分析:我们都知道运行时间对我们来说很重要、有时候不惜用大量的内存去换取一点时间、有些人可能都比较关注这个问题、首先时间上:cin>scanf>getchar
所以我们尽量用getchar()和gets()来优化时间、特别是在数据输入量很大的时候、加速效果十分明显、
但是每次都花时间来写getchar确实很烦、于是模板便应运而生了、
一般情况下、使用模板可以达到常数倍时间的优化
注:这个对ACM的帮助不大、除非遇到卡常数时间的出题人= =|||(不过想要题目的排名靠前还是有帮助的)
//适用于正整数 template <class T> inline void scan_d(T &ret) { char c; ret=0; while((c=getchar())<'0'||c>'9'); while(c>='0'&&c<='9') ret=ret*10+(c-'0'),c=getchar(); }
//适用于正负整数 template <class T> inline bool scan_d(T &ret) { char c; int sgn; if(c=getchar(),c==EOF) return 0; //EOF while(c!='-'&&(c<'0'||c>'9')) c=getchar(); sgn=(c=='-')?-1:1; ret=(c=='-')?0:(c-'0'); while(c=getchar(),c>='0'&&c<='9') ret=ret*10+(c-'0'); ret*=sgn; return 1; }
//适用于正负数,(int,long long,float,double) template <class T> bool scan_d(T &ret){ char c; int sgn; T bit=0.1; if(c=getchar(),c==EOF) return 0; while(c!='-'&&c!='.'&&(c<'0'||c>'9')) c=getchar(); sgn=(c=='-')?-1:1; ret=(c=='-')?0:(c-'0'); while(c=getchar(),c>='0'&&c<='9') ret=ret*10+(c-'0'); if(c==' '||c=='\n'){ ret*=sgn; return 1; } while(c=getchar(),c>='0'&&c<='9') ret+=(c-'0')*bit,bit/=10; ret*=sgn; return 1; }
inline void out(int x) { if(x>9) out(x/10); putchar(x%10+'0'); }