fread快速读入+fwrite快速输出大法好。
实测比普通读入优化快一倍,输出不知道高到哪里去了。
/*
* 快速读入输出模板 Au: Hatsune Miku
* 用法:
* 1. 在打开文件后立即调用init()函数初始化缓冲区。
* 2. 读入时请使用 read()读入,可以读入字符串(仅限字母)与数字。
* 3. 输出时请使用 print()输出到缓冲区,可以输出字符串、数字与字符。
* 4. 在关闭文件前使用 flush()刷新缓存区(真正输出到文件中)。
* 函数返回值:
* 1. 所有输入操作均有返回值,返回真表示读入成功,变量已被修改,返回假表示读不到指定类型的数据,变量被清零;
* 2. 所有输出操作均无返回值,缓冲区自动刷新。
* 3. 初始化函数无返回值,如果超出缓冲区会RE。
* 玩得愉快!
*/
#include<cstdio>
#include<cctype>
#include<cstdlib>
#include<assert.h>
using namespace std;
const int InputBufferSize = 67108864;//输入缓冲区大小
const int OutputBufferSize = 67108864;//输出缓冲区大小
namespace input
{
char buffer[InputBufferSize],*s,*eof;
inline void init()
{
assert(stdin!=NULL);
s=buffer;
eof=s+fread(buffer,1,InputBufferSize,stdin);
}
inline bool read(int &x)
{
x=0;
int flag=1;
while(!isdigit(*s)&&*s!='-')s++;
if(eof<=s)return false;
if(*s=='-')flag=-1,s++;
while(isdigit(*s))x=x*10+*s++-'0';
x*=flag;
return true;
}
inline bool read(char* str)
{
*str=0;
while(isspace(*s))s++;
if(eof<s)return false;
while(!isspace(*s))*str=0,*str=*s,str++,s++;
*str=0;
return true;
}
}
namespace output
{
char buffer[OutputBufferSize];
char *s=buffer;
inline void flush()
{
assert(stdout!=NULL);
fwrite(buffer,1,s-buffer,stdout);
s=buffer;
fflush(stdout);
}
inline void print(const char ch)
{
if(s-buffer>OutputBufferSize-2)flush();
*s++=ch;
}
inline void print(char* str)
{
while(*str!=0)print(char(*str++));
}
inline void print(int x)
{
char buf[25]= {0},*p=buf;
if(x<0)print('-'),x=-x;
if(x==0)print('0');
while(x)*(++p)=x%10,x/=10;
while(p!=buf)print(char(*(p--)+'0'));
}
}
using namespace input;
using namespace output;
int num;
int main()
{
freopen("data.in","rb",stdin);//请根据题目修改文件名
freopen("data2.out","wb",stdout);//请根据题目修改文件名
init();
/*
...
此处应有代码。
...
下面的代码示例读入一个数列,然后输出这个数列。
``````````````````````````````````````
` int a; `
` while(read(a))print(a),print(' '); `
``````````````````````````````````````
*/
while(read(num))print(num),print(' ');
flush();
return 0;
}