众所周知cout要比scanf耗时,那么在已经使用scanf、算法优化已经饱和却还超时的情况下,可以试试输入外挂。
- 整型输入
int sgn;//整数的正负
char c;
c=getchar();
if(c==EOF) return false;
while(c!='-'&&(c<'0'||c>'9')) c=getchar();//如果输入的既不是整数又不是-号则跳过
sgn=(c=='-')?-1:1;//记录符号
ret=(c=='-')?0:(c-'0');//记录初始值
while((c=getchar())>='0'&&c<='9') ret=ret*10+c-'0';//将输入转换成整数形式
ret*=sgn;//加上符号
return true;
}
- 浮点型输入
bool readdouble(double &ret) {
int sgn;//浮点的正负
double bit=0.1;//小数点后的权重
char c;
c=getchar();
if(c==EOF) return false;
while(c!='-'&&c!='.'&&(c<'0'||c>'9')) c=getchar();//如果输入的既不是整数又不是-号又不是.则跳过
sgn=(c=='-')?-1:1;//记录符号
ret=(c=='-')?0:c-'0';//记录初始值
while((c=getchar())>='0'&&c<='9') ret=ret*10+c-'0';//将输入转换成整数形式
if(c==' '||c=='\n') {//输入已经停止没有出现小数位
ret*=sgn;
return true;
}
while((c=getchar())>='0'&&c<='9') ret+=bit*(c-'0'),bit/=10;//小数点后的转换
ret*=sgn;//加上符号
return true;
}
调用部分
int n;
double m;
if(readint(n)) printf("%d\n",n);
if(readdouble(m)) printf("%lf",m);