目录
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里 double的输入是 %lf,输出是 %f!用 输出会为 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.蒟蒻的一点感悟
绝大部分题都只是问你能不能做到和需要多少去做到,所以不用考虑具体怎么做,把问题简化就好了