0Koto @ 2017-07-29 16:43:57
蒟蒻试着用了这样的快读快写
inline void in(int &x){
x=0;int f=1;char c=getchar();
while(!isdigit(c)){f=-1;c=getchar();}
while(isdigit(c)){x=(x<<3)+(x<<1)+(c^48);c=getchar();}
x*=f;
}
inline void out(int x){
if(!x){putchar('0');return;}
if(x<0){x=~x+1;putchar('-');}
char c[20]={0};
while(x){c[++c[0]]=x%10+48;x/=10;}
while(c[0]) putchar(c[c[0]--]);
}
然后会wa很多点,但改回printf()和scanf()或cin cout就不会wa;是因为用了getchar()吗?
by Sooke @ 2017-07-29 19:51:05
@Adelheid_Bernstein
话说读入优化中的:
x=(x<<3)+(x<<1)+(c^48)
为什么 c^48 而不是 c - 48
by Weng_Weijie @ 2017-07-30 07:52:04
因为你读入一个空格或换行,就会把f变成-1,然后就WA了
by 0Koto @ 2017-07-30 09:00:07
@Sooke 48(‘0’)的二进制是110000,57(‘9’)的二进制是111001,xor就相当于正好把前面的11去掉了
by 0Koto @ 2017-07-30 09:05:20
@Weng_Weijie 大佬说的没错,在f=-1 前加了if(c=='-')就过了,十分感谢
by Sooke @ 2017-07-30 09:25:50
@Adelheid_Bernstein ..
by 0Koto @ 2017-07-30 09:36:51
@Sooke 听说不管怎样一般还是位运算快
by Sooke @ 2017-07-30 11:15:06
@Adelheid_Bernstein 嗯,受到指教了QAQ
by 0Koto @ 2017-07-30 17:13:09
@Sooke 橙名蒟蒻在红名大佬前瑟瑟发抖w
by Alextokc @ 2017-09-02 02:46:58
你这样不如用fread..write..
而且据说位运算版本没有非位运算版本的快在一般情况下..