读入与输出
scanf
scanf读入char数组不需要写&
scanf读入longlong类型时在unix(linux ububt mac osx)下用lld,在WIN32下用I64d,WIN64下以上两种都可以。为了考试时避免忘记更改可以在文件开头加上
#ifdef WIN32
#define LL "%I64d"
#else
#define LL "%lld"
#endif
调用时
scanf(LL,&a);
cin
cin正常状态下比scanf读入慢,但是可以在文件开头加入
ios::sync_with_stdio(false)
可以使速度大大提升,但是写上这句话之后不再能够使用scanf
读入优化
getint
void read(int &x)
{
x=0;int f=1;
char c=getchar();
while(!isdigit(c))
{
if(c=='-') f=-1;
c=getchar();
}
while(isdigit(c))
{
x=x*10+c-'0';
c=getchar();
}
x*=f;
}
ifread
char ch;
char buf[100000],*p1 = buf,*p2 = buf;
#define nc() \
p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2) ? EOF :*p1++;
#define read(x) \
x=0;ch=nc(); \
while(!isdigit(ch)) ch=nc();\
while(isdigit(ch))x=x*10+ch-'0',ch=nc();
输出优化
char s[80000000]
void print(int v)
{
int x=0,y=0
while(v)
{
x++;
y=y*10+v%10;
v/=10;
}
for(int i=1;i<=x;++i)
{
s[++l]=y%10+'0';
y/=10;
}
l++;
s[l]='\n';
}
速度比较
读入1e7个int
标准cin: 12.23s
scanf: 9.718s
getint: 2.996s
ios::sync_with_stdio(false)+cin:2.18s
ifread:0.6948s
输出1e7个数
printf: 30s
cout: 20s
输出优化:1.47s