标签:char 替换 读取 排名 使用 operator 定义函数 ios else
偶然发现自己代码的常数还算小?
于是乎总结了一下自己发现的一些常数技巧(还没写完,后续会更)
各位看官请耐心看完……前面都是大家知道的,后面会写些自己发现的东西
register int i=1;
)register
跑需\(2s\),加了仅需\(0.2s\)for
的变量前加register
inline int find(int x){return x;}
)inline
是没有用的inline
for(int i=1;i<=n;++i)a[i]=1;
for(int i=1;i<=n;i+=4)a[i]=a[i+1]=a[i+2]=a[i+3]=1;
++i
,而不是i++
比如:
x?get1(),work1():get2(),work2()
看上去很像是:
if(x) {get1(); work1();}
else {get2(); work2();}
但实际上它是这样的:
if(x){get1(); work1();}
else get2();
work2();
为什么?因为它读取到冒号后的第一个逗号就截止了,以为逗号后面是下一条语句
define
的用处是替换代码,编译程序的时候直接将代码替换后再编译#define f(x) (x*x)
#define p (1e9+7)
#define For(i,j,k) for(int i=j;i<=k;++i)
#define Formylove return 0
,最后就只要Formylove
了注意事项
define
定义函数,比如定义#define min(x,y) (x<y?x:y)
时,若x
为一个递归函数,会使得程序调用两次这个函数,若在线段树上使用这个,会使得复杂度变为\(log^2n\)#define f(x,y) x+y
,如果外部调用为z*f(x,y)
,就会变为z*x+y
了位运算
>加减号
>乘法
>除法
>取膜
/2
可以替换为*0.5
)考场实用型:
template <typename _Tp> inline _Tp read(_Tp&x){
char c11=getchar(),ob=0;x=0;
while(c11^‘-‘&&!isdigit(c11))c11=getchar();if(c11==‘-‘)ob=1,c11=getchar();
while(isdigit(c11))x=x*10+c11-‘0‘,c11=getchar();if(ob)x=-x;return x;
}
int main(){read(x);}
刷速冲榜型:
struct ios {
inline char read(){
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 c11,boo;
for(c11=read(),boo=0;!isdigit(c11);c11=read()){if(c11==-1)return *this;boo|=c11==‘-‘;}
for(x=0;isdigit(c11);c11=read())x=x*10+(c11^‘0‘);boo&&(x=-x);return *this;
}
} io;
int main(){io>>x;}
以下都是博主自己的经验,不保证完全正确,dalao勿喷
bits/stdc++.h
for
循环内定义变量不如在for
循环外部定义,可以减少定义次数he=1;ta=1;q[1]=s;
可以合并为he=ta=1,q[1]=s;
可以进一步合并为q[he=ta=1]=s;
x*2
替换为x<<1
,x/2
替换为x>>1
,x%2
替换为x&1
下面是一些其他的技巧
ikj
(当然想更快可以矩阵分块)for(int i=0;i<A.n;++i)
for(int k=0;k<A.m;++k){
ll t = A[i][k];if(!t)continue;
for(int j=0;j<B.m;++j)
res[i][j]=(res[i][j]+t*B[k][j])%p;
}
举个例子,若要查看程序a.cpp
的效率,可以输入以下命令:
g++ -o a a.cpp -pg
./a
gprof -b ./a > res
然后在对应文件夹里就会出现一个叫res
的文件,里面即是程序这次在各个函数内运行的时间,然后就可以找到那个拖累程序的函数进行优化了
标签:char 替换 读取 排名 使用 operator 定义函数 ios else
原文地址:https://www.cnblogs.com/penth/p/10257539.html