C++ 算法竞赛模板汇总(持续更新)
1. C 算法竞赛模板汇总在算法竞赛中一套顺手、经过验证的模板能极大提升做题效率避免在赛场上重复造轮子。本文整理了我个人常用的 C 竞赛模板涵盖基础输入输出、数据结构、图论、数学和字符串等高频模块模板均经过实战检验可以直接复制使用。2. 基础模板2.1 头文件与宏定义#include bits/stdc.h using namespace std; #define endl \n #define int long long #define all(x) (x).begin(), (x).end() #define sz(x) (int)(x).size() #define rep(i, a, b) for (int i (a); i (b); i) #define per(i, a, b) for (int i (a); i (b); i--) using ll long long; using ull unsigned long long; using pii pairint, int; using vi vectorint; using vll vectorll; const int INF 0x3f3f3f3f; const ll LINF 0x3f3f3f3f3f3f3f3f; const int MOD 1e9 7;2.2 快读快写inline int read() { int x 0, f 1; char ch getchar(); while (ch 0 || ch 9) { if (ch -) f -1; ch getchar(); } while (ch 0 ch 9) { x x * 10 ch - 0; ch getchar(); } return x * f; } inline void write(int x) { if (x 0) putchar(-), x -x; if (x 9) write(x / 10); putchar(x % 10 0); }3. 数据结构3.1 并查集DSUstruct DSU { vectorint fa, sz; DSU(int n) : fa(n 1), sz(n 1, 1) { iota(all(fa), 0); } int find(int x) { return fa[x] x ? x : fa[x] find(fa[x]); } void unite(int x, int y) { x find(x), y find(y); if (x y) return; if (sz[x] sz[y]) swap(x, y); fa[y] x; sz[x] sz[y]; } bool same(int x, int y) { return find(x) find(y); } };3.2 树状数组Fenwick Treetemplatetypename T struct Fenwick { int n; vectorT tr; Fenwick(int n) : n(n), tr(n 1) {} void add(int x, T v) { for (; x n; x x -x) tr[x] v; } T sum(int x) { T res 0; for (; x; x - x -x) res tr[x]; return res; } T range(int l, int r) { return sum(r) - sum(l - 1); } };3.3 线段树Segment Treetemplatetypename T struct SegTree { int n; vectorT tr, lazy; SegTree(int n) : n(n), tr(4 * n), lazy(4 * n) {} void push(int u, int l, int r) { if (lazy[u]) { int mid (l r) 1; tr[u 1] lazy[u] * (mid - l 1); tr[u 1 | 1] lazy[u] * (r - mid); lazy[u 1] lazy[u]; lazy[u 1 | 1] lazy[u]; lazy[u] 0; } } void update(int u, int l, int r, int ql, int qr, T v) { if (ql l r qr) { tr[u] v * (r - l 1); lazy[u] v; return; } push(u, l, r); int mid (l r) 1; if (ql mid) update(u 1, l, mid, ql, qr, v); if (qr mid) update(u 1 | 1, mid 1, r, ql, qr, v); tr[u] tr[u 1] tr[u 1 | 1]; } T query(int u, int l, int r, int ql, int qr) { if (ql l r qr) return tr[u]; push(u, l, r); int mid (l r) 1; T res 0; if (ql mid) res query(u 1, l, mid, ql, qr); if (qr mid) res query(u 1 | 1, mid 1, r, ql, qr); return res; } };3.4 ST 表Sparse Tabletemplatetypename T struct SparseTable { vectorvectorT st; vectorint lg; SparseTable(const vectorT a) { int n sz(a); lg.resize(n 1); for (int i 2; i n; i) lg[i] lg[i / 2] 1; int k lg[n] 1; st.assign(k, vectorT(n)); for (int i 0; i n; i) st[0][i] a[i]; for (int j 1; j k; j) for (int i 0; i (1 j) n; i) st[j][i] max(st[j - 1][i], st[j - 1][i (1 (j - 1))]); } T query(int l, int r) { int j lg[r - l 1]; return max(st[j][l], st[j][r - (1 j) 1]); } };4. 图论4.1 Dijkstra 最短路vectorll dijkstra(int n, int s, const vectorvectorpii g) { vectorll dist(n 1, LINF); dist[s] 0; priority_queuepairll, int, vectorpairll, int, greater pq; pq.push({0, s}); while (!pq.empty()) { auto [d, u] pq.top(); pq.pop(); if (d ! dist[u]) continue; for (auto [v, w] : g[u]) { if (dist[v] d w) { dist[v] d w; pq.push({dist[v], v}); } } } return dist; }4.2 Kruskal 最小生成树struct Edge { int u, v, w; bool operator(const Edge o) const { return w o.w; } }; ll kruskal(int n, vectorEdge edges) { sort(all(edges)); DSU dsu(n); ll res 0; int cnt 0; for (auto [u, v, w] : edges) { if (!dsu.same(u, v)) { dsu.unite(u, v); res w; cnt; } } return cnt n - 1 ? res : -1; }4.3 拓扑排序Kahn 算法vectorint toposort(int n, const vectorvectorint g) { vectorint indeg(n 1), res; for (int u 1; u n; u) for (int v : g[u]) indeg[v]; queueint q; for (int i 1; i n; i) if (!indeg[i]) q.push(i); while (!q.empty()) { int u q.front(); q.pop(); res.push_back(u); for (int v : g[u]) if (--indeg[v] 0) q.push(v); } return res; }5. 数学5.1 快速幂ll qpow(ll a, ll b, ll p MOD) { ll res 1; for (; b; b 1, a a * a % p) if (b 1) res res * a % p; return res; }5.2 线性筛素数vectorint primes; vectorbool isPrime; void sieve(int n) { isPrime.assign(n 1, true); isPrime[0] isPrime[1] false; for (int i 2; i n; i) { if (isPrime[i]) primes.push_back(i); for (int p : primes) { if (1LL * i * p n) break; isPrime[i * p] false; if (i % p 0) break; } } }5.3 最大公约数与最小公倍数ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; } ll lcm(ll a, ll b) { return a / gcd(a, b) * b; }5.4 组合数预处理阶乘const int MAXN 1e5 5; ll fact[MAXN], invFact[MAXN]; void initComb() { fact[0] 1; for (int i 1; i MAXN; i) fact[i] fact[i - 1] * i % MOD; invFact[MAXN - 1] qpow(fact[MAXN - 1], MOD - 2); for (int i MAXN - 2; i 0; i--) invFact[i] invFact[i 1] * (i 1) % MOD; } ll C(int n, int m) { if (n m || m 0) return 0; return fact[n] * invFact[m] % MOD * invFact[n - m] % MOD; }6. 字符串6.1 KMP 匹配vectorint kmp(const string s) { int n sz(s); vectorint pi(n); for (int i 1; i n; i) { int j pi[i - 1]; while (j s[i] ! s[j]) j pi[j - 1]; if (s[i] s[j]) j; pi[i] j; } return pi; } vectorint kmpMatch(const string txt, const string pat) { string s pat # txt; auto pi kmp(s); int plen sz(pat); vectorint occ; for (int i plen 1; i sz(s); i) if (pi[i] plen) occ.push_back(i - 2 * plen); return occ; }6.2 字符串哈希双哈希struct StringHash { using P pairint, int; static constexpr int B1 131, B2 13331; static constexpr int M1 1e9 7, M2 1e9 9; vectorll h1, h2, p1, p2; StringHash(const string s) { int n sz(s); h1.resize(n 1); h2.resize(n 1); p1.resize(n 1, 1); p2.resize(n 1, 1); for (int i 0; i n; i) { h1[i 1] (h1[i] * B1 s[i]) % M1; h2[i 1] (h2[i] * B2 s[i]) % M2; p1[i 1] p1[i] * B1 % M1; p2[i 1] p2[i] * B2 % M2; } } P get(int l, int r) { return { (h1[r 1] - h1[l] * p1[r - l 1] % M1 M1) % M1, (h2[r 1] - h2[l] * p2[r - l 1] % M2 M2) % M2 }; } };以上是本人常用的一些 C 算法竞赛模板涵盖了从基础工具到核心算法的常用模块。在实际比赛中建议根据题目特点灵活选用同时也鼓励大家在理解原理的基础上打磨自己的模板不断优化可读性和鲁棒性。祝大家比赛顺利AC 不断

相关新闻

为什么你的AI数字人视频完播率低于28.6%?——基于TOP100爆款账号的神经响应热力图反向推演

为什么你的AI数字人视频完播率低于28.6%?——基于TOP100爆款账号的神经响应热力图反向推演

更多请点击: https://codechina.net 第一章:神经响应热力图与完播率阈值的因果建模 神经响应热力图(Neural Response Heatmap, NRH)是基于fMRI或EEG时序信号重构的时空激活强度矩阵,其横轴为视频时间戳(秒…

2026/7/22 0:22:01阅读更多 →
从灰阶到爆款色卡,AI配色方案生成全链路拆解,含可复用的HSV-LLM映射公式

从灰阶到爆款色卡,AI配色方案生成全链路拆解,含可复用的HSV-LLM映射公式

更多请点击: https://intelliparadigm.com 第一章:从灰阶到爆款色卡,AI配色方案生成全链路拆解,含可复用的HSV-LLM映射公式 灰阶输入的语义升维机制 传统配色工具常将灰阶图像视为低信息量起点,而现代AI配色系统将其…

2026/7/21 22:39:13阅读更多 →
KK_Plugins终极指南:解决Illusion游戏插件安装的5大常见问题

KK_Plugins终极指南:解决Illusion游戏插件安装的5大常见问题

KK_Plugins终极指南:解决Illusion游戏插件安装的5大常见问题 【免费下载链接】KK_Plugins Various plugins for various Illusion games 项目地址: https://gitcode.com/gh_mirrors/kk/KK_Plugins KK_Plugins是专为Illusion旗下多款游戏(如Koika…

2026/7/21 19:31:52阅读更多 →
高效免费软件推荐与深度评测

高效免费软件推荐与深度评测

1. 为什么这些免费软件能获得15K高赞?在国外知名问答平台上获得15K点赞的免费软件推荐,本质上反映了用户对"高效工具零成本"组合的强烈需求。这类内容爆火的核心原因有三点:首先,专业软件订阅制付费模式已成为主流&…

2026/7/22 5:46:55阅读更多 →
A*启发式批次选择:提升CNN训练效率的智能样本选择方法

A*启发式批次选择:提升CNN训练效率的智能样本选择方法

在深度学习训练中,我们常常陷入一个误区:以为提升模型性能就必须增加网络深度或参数量。但现实是,很多团队受限于计算资源,无法承受越来越深的CNN网络带来的训练成本。有没有一种方法,能在不改变网络结构的前提下&…

2026/7/22 5:46:55阅读更多 →
Python AI开发必备:5大核心库实战解析与优化技巧

Python AI开发必备:5大核心库实战解析与优化技巧

1. Python AI生态概览Python作为AI领域的主流语言,其丰富的库生态系统让开发者能够快速构建智能应用。根据2023年PyPI官方统计,AI相关库的月下载量已突破2亿次,其中既包含基础数值计算工具,也涵盖前沿的深度学习框架。选择合适的学…

2026/7/22 5:46:55阅读更多 →
C++ Boost库环境配置全攻略:VS、Dev-C++、VS Code三大IDE实战

C++ Boost库环境配置全攻略:VS、Dev-C++、VS Code三大IDE实战

1. 项目概述:为什么Boost库的环境配置是个“技术活”?如果你用C写过稍微复杂点的项目,大概率听说过或者用过Boost库。它就像C标准库的一个超级扩展包,里面塞满了智能指针、线程、正则表达式、文件系统等一大堆实用工具。但很多新手…

2026/7/22 5:46:55阅读更多 →
AI+物联网在能源设施安全监控中的应用实践

AI+物联网在能源设施安全监控中的应用实践

1. 项目概述:能源设施安全监控的智能化转型油气管道和电力设施的安全监控一直是能源行业的痛点。传统人工巡检方式存在响应延迟、盲区覆盖不足等问题,而固定式传感器网络又难以应对复杂环境变化。我们团队开发的"AI监控卫士"系统,通…

2026/7/22 5:46:54阅读更多 →
设计EDA 技术 VP(技术副总裁)12 维度 JD(HR 内部 高管层专用)

设计EDA 技术 VP(技术副总裁)12 维度 JD(HR 内部 高管层专用)

定位:公司最高技术决策层之一,全面负责 EDA / 设计平台 / 芯片研发技术战略、组织、经营、风险与竞争力 1. 对标层级 内部职级:M4 / VP 级 / 高管层 外部对标:华为 21–22 级、互联网 M3/VP、头部芯片 / EDA 公司技术 VP / 研发 VP/CTO 梯队 定位:技术一把手、战略制定者…

2026/7/22 5:44:54阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 0:53:59阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 0:53:59阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 0:53:59阅读更多 →
中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业做小程序,最常见的矛盾是预算有限,但又不希望功能太单薄;没有技术团队,但又希望后续能自己运营;想快速上线,又担心隐性收费和售后失联。选型时如果只看“低价套餐”或“案例数量”,很容…

2026/7/22 0:01:17阅读更多 →
GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

企业做营销,最怕钱花完了,资产没有留下。 效果广告能带来一段时间的曝光,但预算停止后,流量往往也随之停止。短视频内容可能在几天内冲高,也可能很快沉下去。AI搜索时代,企业需要重新思考一个问题&#xff…

2026/7/22 0:01:17阅读更多 →
Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复 一、你的 Agent 在"再想想"的循环里绕了 12 轮,用户已经关窗口了 Agent 与人最大的区别是:人知道什么时候该停下来给答案,Agent 会一直"想"下去。你给 Agent 接…

2026/7/22 0:01:17阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/21 22:53:50阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/21 18:53:30阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/21 18:53:30阅读更多 →