求二进制 1的个数。

int n = 15; //二进制为1111   二进制1的个数
cout<<__builtin_popcount(n)<<endl;//输出4

int n = 15;//二进制为1111		//求二进制奇偶
int m = 7;//111
cout<<__builtin_parity(n)<<endl;//偶数个,输出0
cout<<__builtin_parity(m)<<endl;//奇数个,输出1

int n = 1;//1  //求二进制最后一个1的位置
int m = 8;//1000
cout<<__builtin_ffs(n)<<endl;//输出1
cout<<__builtin_ffs(m)<<endl;//输出4

int n = 1;//1			//求二进制末尾0的个数
int m = 8;//1000
cout<<__builtin_ctzll(n)<<endl;//输出0
cout<<__builtin_ctz(m)<<endl;//输出3

__builtin_clz (unsigned int x)  //求二进制前导零的个数

//判断longlong  后面加个 ll
__builtin_popcountll(111111111111111111);

全排列 

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=4e5+5;
int n[maxn];
int dp[maxn][9];
int main() {
    int ans[9]= {0,1,2,3,4,5,6,7,8};
    int k=0;
    do {
        for(int i=0; i<9; i++) {
            dp[k][i]=ans[i];
        }
        k++;
    } while(next_permutation(ans,ans+9));
    return 0;
}


 

求三角斜边

hypot(3.0,4.0);

Hash Mod 数

1610612741

402653189

201326611

C++ 控制精度

cout<<fixed<<setprecision(20)<<ans<<"\n";

Unordermap与map

Unordermap 快速查找慢建立

Map        快速建立慢查找

Multiset删除操作

删除迭代器删除指定位置

删除值,删除所有与之相等的值

 

Int128的使用

typedef __int128 int128;



template<typename T>void read(T&w) {  //读入

    char c;

    while(!isdigit(c=getchar()));

    w=c&15;

    while(isdigit(c=getchar()))w=w*10+(c&15);

}



void output(int128 x) {

    if(x<0)putchar('-'),x=-x;

    int ss[55],sp=0;

    do ss[++sp]=x%10;

    while(x/=10);

    while(sp)putchar(48+ss[sp--]);

    putchar(32);

}