1. 蓝桥杯算法竞赛模板库深度解析
作为一名参加过多次蓝桥杯并指导过多位获奖选手的算法教练,我深知在竞赛中拥有一套可靠、无bug的算法模板是多么重要。今天我要分享的是经过多年实战检验的30个核心算法模板,这些模板已经修复了网上常见版本中的各种错误和易错点,并补充了国一选手常用的关键细节。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础准备与通用设置
2.1 标准头文件与宏定义
竞赛编程中,时间就是生命。这套模板从一开始就考虑了效率问题:
cpp复制#include <bits/stdc++.h>
using namespace std;
using ll = long long; // 避免int溢出
using PII = pair<int,int>; // 简化常用数据结构
const int INF = 0x3f3f3f3f; // 足够大的int值
const ll LINF = 0x3f3f3f3f3f3f3f3fLL; // long long版INF
重要提示:数组默认使用1-based索引(竞赛常见),需要0-based的会特别标注。这个约定能减少大量下标错误。
3. 基础算法模板精修版
3.1 快速排序(Hoare划分优化版)
网上很多快排模板在边界条件处理上存在问题,这个版本经过严格验证:
cpp复制void quick_sort(int q[], int l, int r) {
if (l >= r) return;
int i = l - 1, j = r + 1; // 扩展边界避免漏判
int x = q[(l + r) >> 1]; // 取中间值作为pivot
while (i < j) {
do i++; while (q[i] < x); // 找到左边第一个≥x的
do j--; while (q[j] > x); // 找到右边第一个≤x的
if (i < j) swap(q[i], q[j]);
}
quick_sort(q, l, j); // 注意这里是j不是i
quick_sort(q, j + 1, r);
}
关键细节:
- 使用do-while确保至少执行一次比较
- 递归分界点选择j而非i,避免死循环
- 初始边界扩展(l-1, r+1)确保全覆盖
3.2 二分查找(精确匹配版)
竞赛中更常用的是边界查找,但精确查找也有其用武之地:
cpp复制int binary_search_idx(int a[], int n, int x) {
int l = 0, r = n - 1; // 0-based版本
while (l <= r) {
int mid = l + (r - l) / 2; // 防溢出写法
if (a[mid] == x) return mid;
else if (a[mid] < x) l = mid + 1;
else r = mid - 1;
}
return -1;
