蓝桥杯自用算法模板

快速幂

long long pow(long long base, int k){
	long long ans = 1;
	while(k > 0){
		if(k & 1){
			ans *= base;
		}
		k >>= 1;
		base *= base;
	}
	return ans;
}

进制转换

void binary(int x, int k) {
	string str = "";
	int p;
	while( x > 0){
		p = x % k;
		if(p > 9){
			str += 'a' + p;
		}
		else{
			str += '0' + p;
		}
		x /= k;
	}
	reverse(str.begin(), str.end());
	cout << str << endl;
}

最大公约数和最小公倍数

int gcd(int a, int b) {			// 最大公约数
	return b == 0 ? a: gcd(b, a%b);
}
int common(int a, int b) {
	int p = gcd(a, b);
	return a*b/p;
}

stringstream 类型转换

void i2s(int x, string &s) {	// int 转 string 
	stringstream ss;
	ss << x;
	ss >> s;
}
void s2i(string s, int &x) {	// string 转 int 
	stringstream ss;
	ss << s;
	ss >> x;
}

Dijkstra最短路径

//Dijkstra核心代码 
vis[u] = true;
for(int i = 1; i < n; i++){
	int minn = inf;
	for(int i = 1; i <= n; i++){
		if(!vis[i] && dis[i] < minn){
			minn = dis[i];
			u = i; 
		}
	}
	vis[u] = true;
	for(int v = 1; v <= n; v++){
		if(mp[u][v] < inf) {
			if(dis[v] > dis[u] + mp[u][v])
				dis[v] = dis[u] + mp[u][v];
		}
	}
}

Floyd

// 核心代码
for( int k = 1; k <= n; k++) {
	for( int i = 1; i <= n; i++) {
		for( int j = 1; j <= n; j++) {
			if(dis[i][j] > dis[i][k] + dis[k][j])
				dis[i][j] = dis[i][k] + dis[k][j];
		}
	}
}

并查集

int getf(int x) {
	if(f[x] == x){
		return x;
	}
	f[x] = getf(f[x]);
	return f[x];
}
void merge(int x, int y) {
	int r1 = getf(x);
	int r2 = getf(y);
	if(r1 != r2) {
		f[r2] = r1;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值