输入输出加速技巧
标签: 输入输出加速技巧
学习人数: 18.0k


高清播放
赞赏支持

有的时候题目的输入数据量比较大,比如要输入10W和数字进行排序。这个时候,如果你直接使用C++的cin和cout函数进行输入输出,有很大的概率会超出题目的时间限制。

在这种情况下,需要的优化的就不再是你的算法过程,而是你的读写数据的速度优化。
如果使用cin和cout函数进行输入输出,我们建议你在main()里首先写入下面两行代码。


C++ cin/cout加速

ios_base::sync_with_stdio(0);  
cin.tie(0); cout.tie(0);  

如果题目的输入量巨大,比如要输入100W个数字,这个时候我们建议你使用C语言的scanf和printf语句进行输入输出。

如果在这种情况下还超时,那么你就需要用到下面的输入输出加速外挂了。

//适用于正负整数  
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;  
}  
inline void out(int x) {  
   if(x>9) out(x/10);  
   putchar(x%10+'0');  
}  

 

加速外挂原理:
getchar的速度 快于  scanf的速度

 

速度比较

getchar  >  scanf  >  cin
putchar  >  printf  >  cout

 

参考代码

// 求1 + n 的和  
#include <bits/stdc++.h>  
using namespace std;  
  
//适用于正负整数  
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;  
}  
inline void o...
登录查看完整内容


课后作业

掌握输入输出加速技巧


登录后开始许愿

暂无评论,来抢沙发