快读快输的含义
在这里给大家介绍一下快读快输,自己也存个档。。。。。。
inline void read(int &x) {//开实参,要使读入的值在里面发生变化
x=0; //如果对实参不了解的可以改为int类型的
int f=1;//这个是用来判断正负的标志
char s=getchar();//读入每一个空行、空格和数字
while(s<'0'||s>'9') {//读入空格和换行阶段
if(s=='-')//表明这个数是负数
f=-1;
s=getchar();//重复读入知道TA是数字
}
while(s>='0'&&s<='9') {//读入数字阶段
x=x*10+s-48;//计算x的值,'0'的ASCII码值是48,身下的自己想
s=getchar();//重复读入直到TA读完
}
x*=f;//正数不改变符号(x*1),负数就改变(x*-1)
}//此之谓快读
inline void pr(int x) {
if(x<0) {//负数
putchar('-');//要先输出负号
x=-x;//然后就以正数情况输出,这个可以放到pr外面判断,可以节省一丢丢时间
}
if(x>9)//因为putchar一次只能输出一位,而且要从前往后输出,所以要用递归输出
pr(x/10);//递归输出
putchar(x%10+48);//作为字符输出
}
这里的inline可以节省函数调用的时间,但建议递归是不要用,有可能会爆
总的再来一个可以copy的:
inline void read(int &x) {
x=0;
int f=1;
char s=getchar();
while(s<'0'||s>'9') {
if(s=='-')
f=-1;
s=getchar();
}
while(s>='0'&&s<='9') {
x=x*10+s-48;
s=getchar();
}
x*=f;
}
inline void pr(int x) {
if(x<0) {
putchar('-');
x=-x;
}
if(x>9)
pr(x/10);
putchar(x%10+48);
}
还有一个,纯属个人测试,(好像)register不会缩时间(吧)