1.更快(最快)的读入优化

struct ios {
    inline char gc(){
        static const int IN_LEN=1<<18|1;
        static char buf[IN_LEN],*s,*t;
        return (s==t)&&(t=(s=buf)+fread(buf,1,IN_LEN,stdin)),s==t?-1:*s++;
    }

    template <typename _Tp> inline ios & operator >> (_Tp&x){
        static char ch,sgn; ch = gc(), sgn = 0;
        for(;!isdigit(ch);ch=gc()){if(ch==-1)return *this;sgn|=ch=='-';}
        for(x=0;isdigit(ch);ch=gc())x=x*10+(ch^'0');
        sgn&&(x=-x); return *this;
    }
} io;

int main(){io>>a>>b;}

需要注意的是,一旦用了这个读入优化之后,scanf,getchar什么的都不能用了!

2.memset用来赋最大值(非0,-1)

注意:
memset(dis,0x7f,sizeof dis);
dis[0][0]=0x7f7f7f7f
但是dis必须是int型的

3.错排公式

错排公式D(n) = (n-1) [D(n-2) + D(n-1)],特殊地,D(1) = 0, D(2) = 1.

4. 圆周率

圆周率=acos(-1.0)

5.自然对数

自然对数=exp(1.0)

6.浮点数比较时最好控制精度

#define eps 1e-6
fabs(a-b)<eps

7.判断是不是2的幂

x > 0 ? ( x & (x - 1)) == 0 : false

8.lowbit函数 :

return x & (-x) 

9.Runtime Error

指你的程序发生了运行时错误。可能是由于内存访问违规(数组下标越界也包括运行时下标为负数的情况)、除0等运行时问题,不是超时!!

10.除vector和string以外的STL都不支持*(it+1)的访问形式

11.位运算的妙用

  • a&1 相当于a%2==1(判断奇偶性);

  • a^b 相当于a!=b(判断a,b是否相等)

  • 1<<n 2n

12.运用fill函数给任意容器赋任意值

(1)给二维数组赋值

fill(f[0], f[0]+N*N, k);
其中k就是要填充的值。

(2)其他容器

13.哭了, C + + 11 C++11 C++11 d o u b l e double double的输入是 % l f \%lf, %lf输出是 % f \%f ! %f %lf 输出会为 0.0000 0.0000 0.0000


输入时: 
double t1;
scanf("%lf",&t1); 

float t2;
scanf("%f",&t2);
 
我们发现,double的输入是 %lf
         float的输入是  %f  

输出时,无论double还是float都是 %f 输出,如果double的用 %lf输出会为0.0000 

printf("%f",t1);

printf("%f",t2);

14.蒟蒻的一点感悟

绝大部分题都只是问你能不能做到和需要多少去做到,所以不用考虑具体怎么做,把问题简化就好了