#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
获取行
cin>>str//受空格影响
获取行
getline(cin,str);//整行取包括空格
输入
cin>>a[0]>>a[1]>>a[2];//以空格分隔
输出
puts("YES");//自带换行
增强for遍历字符串
for(auto& c:str){}//取字符串中每一字符
排序
sort(a,a+3);//升序排序
元素平移
//实现x后方元素平移,123456->561234
reverse(w+1,w+x+1)//前半反转
reverse(w+x+1,w+n+1)//后半反转
reverse(w+1,w+n+1)//全体反转
数组初始化
const int N=1010;//比最大值大
int a[N];
//牺牲a[0],实现元素与下标的统一
for(int i=1;i<=n;i++){
a[i]=i;
}
并查集
//并
p[find(x)] = find(y);
// 查
int find(int x)
{
if (p[x] != x) p[x] = find(p[x]);
return p[x];
}
//判断是否连通
bool res = true;
for(int i=2;i<n;i++){
if(find(i)!=find(1)){
res=false;
break;
}
}
if(res) puts("YES");
else puts("NO");
BFS
在这里插入代码片
DFS二维
void dfs(vector<vector<char>>& grid,int r, int c){
int nr = grid.size();//获取行
int nc = grid[0].size();//获取列
grid[r][c] = '0';
if(r-1 >=0 && grid[r-1][c] =='1') dfs(grid,r-1,c);
if(c-1 >=0 && grid[r][c-1] =='1') dfs(grid,r,c-1);
if(c+1 <nc && grid[r][c+1] =='1') dfs(grid,r,c+1);
if(r+1 <nr && grid[r+1][c] =='1') dfs(grid,r+1,c);
}
快速排序
在这里插入代码片
十进制转二进制(除2取余)
string toBinary(int num) {
if (num == 0) return "0";
string binary;
while (num > 0) {
binary += (num%2) ? "1" : "0";
num /= 2;
}
reverse(binary.begin(), binary.end());
return binary;
}
二进制乘法中,各项末尾0的个数和,等于乘积末尾0的个数
最大连续公共子序列:暴力、二分+哈希字符串匹配
字符串截取
str.substr(i,len);//从i开始的len个字母
二进制枚举
for (int i = 0; i < 1 << cnt; i ++ )//1 <<cnt,1左移cnt表示2的cnt次方
{
int t = 0;
for (int j = 0; j < cnt; j ++ )
t += i >> j & 1;//i右移j与上1,表示看i的二进制第j位是不是1
平方
pow(2,n);
开方
sqrt(num);
字符串转long long
stoll(str);//string to long long