C++基础

#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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值