【零零碎碎的knowledge】

 

1 for(int i = 1; i <= n; ++i) //预先算出log_2(i)+1的值,用的时候直接调用就可以了
2       lg[i] = lg[i-1] + (1 << lg[i-1] == i);  //看不懂的可以手推一下
3 for(int i = 1; i <= n; ++i){ //约等于
4     if((1<<lg[i-1])==i) lg[i]=lg[i-1]+1;  
5     else lg[i]=lg[i-1];
6 }
预先求出log2(i) 常数优化
1 int add(int U,int V,int val){
2     a[++N].to=V;
3     a[N].edge=val;
4     a[N].next=last[U];
5     last[U]=N;
6 }
邻接表
 1 #pragma GCC optimize(2)
 2 #pragma GCC optimize(3)
 3 #pragma GCC optimize("Ofast")
 4 #pragma GCC optimize("inline")
 5 #pragma GCC optimize("-fgcse")
 6 #pragma GCC optimize("-fgcse-lm")
 7 #pragma GCC optimize("-fipa-sra")
 8 #pragma GCC optimize("-ftree-pre")
 9 #pragma GCC optimize("-ftree-vrp")
10 #pragma GCC optimize("-fpeephole2")
11 #pragma GCC optimize("-ffast-math")
12 #pragma GCC optimize("-fsched-spec")
13 #pragma GCC optimize("unroll-loops")
14 #pragma GCC optimize("-falign-jumps")
15 #pragma GCC optimize("-falign-loops")
16 #pragma GCC optimize("-falign-labels")
17 #pragma GCC optimize("-fdevirtualize")
18 #pragma GCC optimize("-fcaller-saves")
19 #pragma GCC optimize("-fcrossjumping")
20 #pragma GCC optimize("-fthread-jumps")
21 #pragma GCC optimize("-funroll-loops")
22 #pragma GCC optimize("-fwhole-program")
23 #pragma GCC optimize("-freorder-blocks")
24 #pragma GCC optimize("-fschedule-insns")
25 #pragma GCC optimize("inline-functions")
26 #pragma GCC optimize("-ftree-tail-merge")
27 #pragma GCC optimize("-fschedule-insns2")
28 #pragma GCC optimize("-fstrict-aliasing")
29 #pragma GCC optimize("-fstrict-overflow")
30 #pragma GCC optimize("-falign-functions")
31 #pragma GCC optimize("-fcse-skip-blocks")
32 #pragma GCC optimize("-fcse-follow-jumps")
33 #pragma GCC optimize("-fsched-interblock")
34 #pragma GCC optimize("-fpartial-inlining")
35 #pragma GCC optimize("no-stack-protector")
36 #pragma GCC optimize("-freorder-functions")
37 #pragma GCC optimize("-findirect-inlining")
38 #pragma GCC optimize("-fhoist-adjacent-loads")
39 #pragma GCC optimize("-frerun-cse-after-loop")
40 #pragma GCC optimize("inline-small-functions")
41 #pragma GCC optimize("-finline-small-functions")
42 #pragma GCC optimize("-ftree-switch-conversion")
43 #pragma GCC optimize("-foptimize-sibling-calls")
44 #pragma GCC optimize("-fexpensive-optimizations")
45 #pragma GCC optimize("-funsafe-loop-optimizations")
46 #pragma GCC optimize("inline-functions-called-once")
47 #pragma GCC optimize("-fdelete-null-pointer-checks")
编译优化(前方高能)
 1 struct node{
 2     int value,num;
 3     friend bool operator < (node a, node b){
 4         if(a.value==b.value) return a.num>b.num;
 5         else return a.value>b.value;
 6     }//升序排序(从小到大)
 7 };
 8 priority_queue<node> q;
 9 /*
10     empty(); 队列为空返回1
11     pop();   出队
12     push();  入队
13     top();   返回队列中优先级最高的元素
14     size();  返回队列中元素的个数
15 */
优先队列(priority_queue)
1 long long ksm(long long a,int n,long long Mod){
2     long long ans=1;
3     while(n){
4         if(n&1) ans=(ans*a)%Mod;
5         a=(a*a)%Mod;
6         n>>=1;
7     }
8     return ans;
9 }
快速幂1
1 sort(a,a+n);//一定要先排序 
2 n=unique(a,a+n)-a;//去重!n为去重后的长度 
去重
1 long long ksm(long long ds,long long zs){
2     int ans=1;
3     for(long long i=zs;i;i>>=1,ds=ds*ds%Mod)
4         if(i&1) ans=ans*ds%Mod;
5     return ans;
6 }
快速幂2
1 inv[1]=1;
2 for(int i=1;i<=n;i++)
3      inv[i]=( (mod-mod/i)*inv[mod%i] +mod ) %mod;
线性求逆元

 

//快读
inline long long read(){ register long long s=(long long)0,w=(long long)1; register char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-') w=-1; ch=getchar(); } while(ch>='0'&&ch<='9'){ s=(s<<1)+(s<<3)+(ch^48); ch=getchar(); } return s*w; }

 

 

· 2的逆元为(n/2)+1;

·约数和定理:约数之和[(p1^α1)-1 ] /(p1-1) * [(p2^α2)-1 ] / (p2-1) * .....  *[(pk^αk)-1 ]/(pk-1)

       约数个数之和=(a1+1)*(a2+1)*…(αk+1 )

 ·三目运算符

if(a<b) min=a;
else min=b;
可以用下面的条件运算符来处理
min=(a<b)?a:b;

 

for(int i=0;i<a.size();i++){
}←这样十分耗时间,每次都要计算一遍a的长度

n=a.size();
for(int i=0;i<n;i++){
}←GOOD
字符串转int
#include<sstream>

int _num(string shu){
    int sh;
    stringstream strr;
    strr<<shu;
    strr>>sh;
    strr.clear();
    return sh;
}
有多少个1
int _bitcount(int x){
    return x==0 ? 0 : _bitcount(x/2)+(x&1);
}

 cout<<endl 比 cout<<'\n' 慢 很 多

关于const这个奇奇怪怪的东西

posted @ 2020-08-21 07:51  latent_Lin  阅读(180)  评论(9编辑  收藏  举报