c++ 读入优化、输出优化模板

时间:2021-06-05 00:42:56

  0. 在有些输入数据很多的变态题中,scanf会大大拖慢程序的时间,cin就更慢了,所以就出现了读入优化。其原理就是一个一个字符的读入,输出优化同理,主要使用getchar,putchar函数。

  1. int型读入优化(long long的只要把x改成long long型即可):

 #include<cctype>
inline int read()
{
int x=,f=; char ch=0;
while(!isdigit(ch)) {f|=ch=='-';ch=getchar();}
while(isdigit(ch)) x=(x<<)+(x<<)+(ch^),ch=getchar();
return f?-x:x;
}

  2.double型读入优化:

 inline double dbread()
{
double x=,y=1.0; int f=; char ch=0;
while(!isdigit(ch)) {f|=ch=='-';ch=getchar();}
while(isdigit(ch)) x=x*+(ch^),ch=getchar();
ch=getchar();
while(isdigit(ch)) x+=(y/=)*(ch^),ch=getchar();
return f?-x:x;
}

  3. int型输出优化(在一些输出数据量很大的题可能会用,同理long long型的改一下x的类型即可): 

 inline void write(int x)
{
if(x<) putchar('-'),x=-x;
if(x>) write(x/);
putchar(x%+'');
}

  在一些题中使用优化可能从TLE逆转AC,代码也比较短,平时多敲敲。

  cin关同步:cin慢的原因主要在于默认cinstdin总是保持同步, 这一步是消耗时间大户. 
  只需要加上ios::sync_with_stdio(false)来关闭同步就好了, 速度甚至要优于scanf.

  但是要注意关同步后不要同时用cin和scanf,会出错。

    std::ios::sync_with_stdio(false);
std::cin.tie();