求二进制 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);
}