力扣算法Algorithm竞赛模板库(codeforces-go):含了算法竞赛中常用的数据结构和算法实现,助力开发者更高效地解决问题

news2024/12/30 2:11:21

1.算法Algorithm竞赛模板库(codeforces-go)

算法竞赛模板库,为算法竞赛爱好者提供了一系列精心设计的算法模板。这个库包含了算法竞赛中常用的数据结构和算法实现,助力开发者更高效地解决问题

在这里插入图片描述

一个算法模板应当涵盖以下几点:

  • 对该算法的基本介绍(核心思想、复杂度等)
  • 参考链接或书籍章节(讲的比较好的资料)
  • 模板代码(可以包含一些注释、使用说明)
  • 模板补充内容(常见题型中的额外代码、建模技巧等)
  • 相关题目链接(模板题、经典题、思维转换题等)

1.1 算法目录

不了解 Go?快速入门教程

  • 集合论与位运算

1.1.1 数据结构

  • 单调栈 monotone_stack.go
  • 单调队列 monotone_queue.go
    • 二维单调队列
  • 双端队列 deque.go
  • 堆(优先队列)heap.go
    • 支持修改、删除指定元素的堆
    • 懒删除堆
    • 对顶维
    • 前缀中位数
    • 滑动窗口前 k 小元素和
  • 并查集 union_find.go
    • 点权并查集
    • 边权并查集(种类并查集)
    • 可持久化并查集
    • 回滚并查集 & 动态图连通性
  • 稀疏表(ST 表)sparse_table.go
  • 树状数组 fenwick_tree.go
    • 差分树状数组(支持区间加、区间求和)
    • 树套树 & 三维偏序
  • 线段树 segment_tree.go
    • 线段树二分
    • 延迟标记(懒标记)
    • 动态开点
    • 线段树合并
    • 线段树分裂
    • 持久化(主席树)
  • 0-1 线段树 segment_tree01.go
  • 左偏树(可并堆)leftist_tree.go
  • 笛卡尔树 cartesian_tree.go
  • 二叉搜索树公共方法 bst.go
  • Treap treap.go
    • 前 k 小元素和
  • 伸展树 splay.go
  • 动态树 LCT link_cut_tree.go
  • 红黑树 red_black_tree.go
  • 替罪羊树 scapegoat_tree.go
  • k-d 树 kd_tree.go
  • 珂朵莉树(ODT)
    • 数组版 odt.go
    • 平衡树版 odt_bst.go
  • 根号分治、分块 sqrt_decomposition.go
  • 莫队算法 mo.go
    • 普通莫队
    • 带修莫队
    • 回滚莫队
    • 树上莫队

1.1.2 字符串 strings.go

  • 字符串哈希
  • KMP
    • pi 函数
    • border
    • 最小循环节
    • fail 树(失配树 / border 树)
  • 扩展 KMP(Z algorithm)
  • 最小表示法
  • 最长回文子串
    • Manacher 算法
  • 回文自动机(回文树,PAM)pam.go
  • 后缀数组(SA)
  • 后缀自动机(SAM)sam.go
  • 字典树 trie.go
    • 可持久化字典树
  • 0-1 字典树 trie01.go
    • 最大异或和
    • 第 k 大异或和
    • 删除元素
    • 可持久化 0-1 字典树
    • 【研究】0-1 字典树上最多有多少个节点
  • AC 自动机 acam.go

1.1.3 数学

  • 数论 math.go
    • 辗转相除法(最大公因数 GCD)
    • 类欧几里得算法 ∑⌊(ai+b)/m⌋
    • Pollard-Rho 质因数分解算法
    • 埃氏筛(埃拉托斯特尼筛法)
    • 欧拉筛(线性筛)
    • 欧拉函数
    • 原根
    • 扩展 GCD
      • 二元一次不定方程
    • 逆元
      • 线性求逆元
    • 中国剩余定理(CRT)
      • 扩展中国剩余定理
    • 离散对数
    • 大步小步算法(BSGS)
      • 扩展大步小步算法
    • 二次剩余
    • Jacobi 符号
    • N 次剩余
    • 卢卡斯定理
      • 扩展卢卡斯定理
    • 卡特兰数
    • 默慈金数
    • 那罗延数
    • 斯特林数
      • 第一类斯特林数(轮换)
      • 第二类斯特林数(子集)
    • 贝尔数
    • 欧拉数
    • 数论分块(整除分块)
    • 莫比乌斯函数
    • 莫比乌斯反演
      • 互质计数问题
      • GCD 求和问题
    • 杜教筛
  • 组合数学 math_comb.go
    • 常见模型
    • 常用恒等式
    • 容斥原理
  • 快速傅里叶变换 FFT math_fft.go
  • 快速数论变换 NTT math_ntt.go
    • 包含多项式全家桶(求逆、开方等等)
  • 快速沃尔什变换 FWT math_fwt.go
  • 连分数、佩尔方程 math_continued_fraction.go
  • 线性代数 math_matrix.go
    • 矩阵相关运算
    • 高斯消元
    • 行列式
    • 线性基
  • 数值分析 math_numerical_analysis.go
    • 自适应辛普森积分
    • 拉格朗日插值
  • 计算几何 geometry.go
    • 线与点
    • 线与线
    • 圆与点
      • 最小圆覆盖
        • Welzl 随机增量法
      • 固定半径覆盖最多点
    • 圆与线
    • 圆与圆
    • 圆与矩形
    • 最近点对
    • 多边形与点
      • 判断点在凸多边形内 O(log n)
      • 判断点在任意多边形内
        • 转角法(统计绕数)
    • 凸包
    • 最远点对
      • 旋转卡壳
    • 半平面交
  • 博弈论 games.go
    • SG 函数

1.1.4 动态规划 dp.go

  • 背包
    • 0-1 背包
    • 完全背包
    • 多重背包
      • 二进制优化
      • 单调队列优化
      • 同余前缀和优化(求方案数)
    • 分组背包
    • 树上背包(依赖背包)
    • 字典序最小方案
  • 线性 DP
    • 最大子段和
    • LCS
    • LPS
    • LIS
      • 狄尔沃斯定理
    • LCIS
    • 长度为 m 的 LIS 个数
    • 本质不同子序列个数
  • 区间 DP
  • 环形 DP
  • 博弈 DP
  • 概率 DP
  • 期望 DP
  • 状压 DP
    • 全排列 DP
    • 旅行商问题(TSP)
    • 子集 DP
    • 高维前缀和(SOS DP)
    • 插头 DP
  • 数位 DP
    • 记忆化搜索(同时跑上下界)
  • 倍增优化 DP
  • 斜率优化 DP(CHT)
  • WQS 二分优化 DP(凸优化 DP / 带权二分)
  • 树形 DP
    • 树的直径个数
    • 在任一直径上的节点个数
    • 树上最大独立集
    • 树上最小顶点覆盖
    • 树上最小支配集
    • 树上最大匹配
    • 换根 DP(二次扫描法)

1.1.5 图论 graph.go

  • 链式前向星
  • DFS 常用技巧
  • BFS 常用技巧
  • 欧拉回路和欧拉路径
    • 无向图
    • 有向图
  • 割点
  • 割边(桥)
  • 双连通分量(BCC)
    • v-BCC
    • e-BCC
  • 仙人掌 & 圆方树
  • 最短路
    • Dijkstra
    • SPFA(队列优化的 Bellman-Ford)
      • 差分约束系统
    • Floyd-Warshall
    • Johnson
    • 0-1 BFS(双端队列 BFS)
    • 字典序最小最短路
    • 同余最短路
  • 最小环
  • 最小斯坦纳树
  • 最小生成树(MST)
    • Kruskal
    • Prim
  • 单度限制最小生成树
  • 次小生成树
  • 曼哈顿距离最小生成树
  • 最小差值生成树
  • 最小树形图
    • 朱刘算法
  • 二分图判定(染色)
  • 二分图找奇环
  • 二分图最大匹配
    • 匈牙利算法
  • 带权二分图最大完美匹配
    • Kuhn–Munkres 算法
  • 拓扑排序
  • 强连通分量(SCC)
    • Kosaraju
    • Tarjan
  • 2-SAT
  • 基环树
  • 最大流
    • Dinic
    • ISAP
    • HLPP
  • 最小费用最大流
    • SPFA
    • Dijkstra
  • 三元环计数
  • 四元环计数
  • 树上问题 graph_tree.go
    • 直径
    • 重心
    • 点分治
    • 点分树
    • 最近公共祖先(LCA)
      • 倍增
      • ST 表
      • Tarjan
      • 树上差分
      • 虚树
    • 重链剖分(HLD)
    • 长链剖分
    • 树上启发式合并(small to large)
      • 按大小合并
      • 轻重儿子合并
    • 树分块
    • Prufer 序列

1.1.6 其他

  • 位运算笔记 bits.go
    • bitset
    • 区间位运算 trick(含 GCD)
  • 二分 三分 sort.go
    • 二分答案
    • 0-1 分数规划
    • 整体二分
  • 搜索 search.go
    • 枚举排列
    • 枚举组合
    • 生成下一个排列
    • 康托展开
    • 逆康托展开
    • 枚举子集
      • Gosper’s Hack
    • 折半枚举(Meet in the middle)
      • 超大背包问题
  • 随机算法 rand.go
    • 模拟退火
  • 基础算法 common.go
    • 算法思路整理
    • 滑动窗口
    • 前缀和
    • 二维前缀和
    • 二维差分
    • 离散化
  • 杂项 misc.go
  • 快速输入输出模板 io.go

1.2 如何选择题目 How to Choose Problems

1.2.1 Rating < 2100

这一阶段主要目标是提高对问题的观察能力。做构造题可以针对性地训练这一点。

选择难度在自己 rating 到 rating+200 范围内的构造题 (tag: constructive algorithms),按照过题人数降序做题,比如 [1700,1900] 区间的就是下面这个链接:

https://codeforces.com/problemset?order=BY_SOLVED_DESC&tags=constructive+algorithms%2C1700-1900

通过大量的构造题训练,提高观察能力,快速找到切题入口。具体见我在知乎上的这篇 回答。

1.2.2 Rating >= 2100(个人训练用,仅供参考)

见识更高的山、更广的海。

按人数从高到低,做 2200+ 的题目。建议不设置难度上限!由于按人数排序,难度分不会太高,不设上限可以避免错过高分好题

  • 构造题 2200+:锻炼手玩能力。
  • DP 2200+:几乎每场都有 DP。
  • 数学综合:数论、组合数学、概率期望等 2200+:包含 6 个 tag。
  • 图论综合:图论+树上问题 2200+:包含 7 个 tag。
  • 字符串 2200+:数据结构题不好筛选,可以找树状数组/线段树的题单,这里只单独筛选字符串的题。
  • 交互 2200+:偶尔做做,了解一些解题套路。
  • 博弈 2000+:也适合锻炼手玩。由于题目比较少,从 2000 开始筛选。

1.3 测试及对拍 Testing

编写一个 run(io.Reader, io.Writer) 函数来处理输入输出。这样写的理由是:

  • main 中调用 run(os.Stdin, os.Stdout) 来执行代码;
  • 测试时,将测试数据转换成 strings.Reader 当作输入,并用一个 strings.Builder 来接收输出,将这二者传入 run 中,然后就能比较输出与答案了;
  • 对拍时需要实现一个暴力算法 runAC,参数和 run 一样。通过 随机数据生成器 来生成数据,分别传入 runACrun,通过比对各自的输出,来检查 run 中的问题。

具体可以见 Codeforces 代码仓库 main,所有非交互题的代码及其对应测试全部按照上述框架实现。

例如:1439C_test.go

交互题的写法要复杂一些,需要把涉及输入输出的地方抽象成接口,详见 interactive_problem。

2. 学习资料及题目 Resources

2.1 常见资料收集

注:由于入门经典上选了很多区域赛的题,一部分题目可以在 GYM 上找到,这样可以就可以用 Go 编程提交了。

算法竞赛入门经典(第二版)

算法竞赛入门经典训练指南

算法竞赛入门经典训练指南(升级版)

算法竞赛进阶指南

算法竞赛入门到进阶

《算法竞赛》配套题单

OI Public Library(含国家队论文)

算法竞赛 (ICPC, OI, etc) 论文,课件,文档,笔记等

算法竞赛课件分享 by hzwer

算法第四版 Java 源码

数据结构和算法动态可视化

OI Wiki

CP-Algorithms

The Ultimate Topic List (with Resources, Problems and Templates)

洛谷日报

All the good tutorials found for Competitive Programming

Codeforces Problem Topics

The Ultimate Topic List(with Tutorials, Problems, and Templates)

GeeksforGeeks 上的算法合集

Pepcy 模板

F0RE1GNERS 模板

https://github.com/hh2048/XCPC 含 jiangly 模板

https://www.cnblogs.com/alex-wei/p/contents.html

【模板整合计划】目录

算法学习笔记(目录)

洛谷模板题(建议按难度筛选)

能力全面提升综合题单

Luogu Problem List

洛谷原试炼场

Links of ICPC/CCPC Contests from China

AtCoder 题目分类

2.2 AtCoder 版《挑战程序设计竞赛》

AtCoder 版!蟻本 (初級編)

AtCoder 版!蟻本 (中級編)

AtCoder 版!蟻本 (上級編)

AtCoder 版!蟻本 (発展的トピック編)

2.3 待整理

【杂文】记一些有用的神奇网站

偶然在 GitHub 上发现的超长列表

算法竞赛训练中较难的部分

算法竞赛中可能不太会遇到的论文题

[杂谈]OI/ACM中冷门算法

Things I don’t know

[meme] If you know at least 3 of these things and you are not red — you are doing it wrong. Stop learning useless algorithms, go and solve some problems, learn how to use binary search.

https://blog.csdn.net/calabash_boy/article/details/79973483

https://github.com/zimpha/algorithmic-library

https://www.luogu.com.cn/blog/command-block/blog-suo-yin-zhi-ding-post

https://wcysai.github.io/

https://www.luogu.com.cn/blog/Troverld/index

C++ @cache

2.4 其他 Others

My GoLand Live Templates and Postfix Completion settings

Useful Tools

GeoGebra

Draw Geometry

Draw Graph

OEIS

Wolfram|Alpha

UpSolve.me

Codeforces Upsolving Helper

Contests Filter

Codeforced

Codeforces Visualizer

Codeforces Solve Tracker

Another Codeforces Solve Tracker

AtCoder Problems

AtCoder Companions

AtCoder-Codeforces Rating converter

Rating and Difficulties

Open Codeforces Rating System

How to Interpret Contest Ratings

Codeforces: Problem Difficulties

Elo rating system

Stay Healthy

Exercises!

视频链接可以看:b站 灵茶山艾府 https://space.bilibili.com/206214

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1457453.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】【类和对象】初始化列表

1.形式和必用场景 初始化列表&#xff1a;以一个冒号开始&#xff0c;接着是一个以逗号分隔的数据成员列表&#xff0c;每个"成员变量"后面跟一个放在括号中的初始值或表达式。 #include<iostream> using namespace std; class Date { public:Date(int year,…

蓝牙BLE学习-GATT和ATT

1. GATT GATT-Generic Attribute profle-通用属性配置文件。GATT层是传输真正数据所在的层。包括了一个数据传输和存储架构以及其基本操作。GATT用来规范attribute中的数据内容&#xff0c;并运用group&#xff08;分组&#xff09;的概念对attribute进行分类管理。没有GATT&a…

幻兽帕鲁游戏联机的时候,显示“网络连接超时”怎么解决?

如果你在游戏联机的时候&#xff0c;显示“网络连接超时”&#xff0c;可以检查下&#xff1a; 1、前提是你已经按照教程部署成功 2、检查防火墙有没有忘记设置&#xff0c;协议是UDP&#xff08;只有TCP不行&#xff0c;一定要有UDP&#xff09;&#xff0c;端口是否填了8211&…

Vue Suspense

<Suspense> 是一项实验性功能。它不一定会最终成为稳定功能&#xff0c;并且在稳定之前相关 API 也可能会发生变化。 <Suspense> 是一个内置组件&#xff0c;用来在组件树中协调对异步依赖的处理。它让我们可以在组件树上层等待下层的多个嵌套异步依赖项解析完成&a…

cookie封装,使用更方便

cookie封装 当提到"cookie封装"&#xff0c;通常是指在开发中对浏览器cookie的处理进行封装和管理&#xff0c;以简化代码和提高可维护性。在Web开发中&#xff0c;cookie是一种用于存储少量数据的小文件&#xff0c;存储在用户的浏览器中。它们被广泛用于跟踪用户会…

循环结构(含练习题)

当循环次数或范围确定时&#xff0c;多用for循环&#xff0c;反之多用while循环 循环结构一般由四部分组成&#xff1a; 初始化语句&#xff0c;在循环开始最初执行&#xff0c;并且只执行一次条件判断、步进语句、循环体 for & foreach for循环&#xff0c;循环体可以执…

22-k8s中pod的调度-亲和性affinity

一、概述 在k8s当中&#xff0c;“亲和性”分为三种&#xff0c;节点亲和性、pod亲和性、pod反亲和性&#xff1b; 亲和性分类名称解释说明nodeAffinity节点亲和性通过【节点】标签匹配&#xff0c;用于控制pod调度到哪些node节点上&#xff0c;以及不能调度到哪些node节点上&…

MySQL学习记录——십이 事务

文章目录 1、了解事务2、事务提交3、事务隔离级别1、隔离性和隔离级别2、查看、设置隔离级别3、读未提交4、读提交5、可重复读6、串行化7、总结 4、事务一致性5、事务隔离性1、隐藏字段2、undo日志3、模拟MVCC4、Read View 6、读提交RC、可重复读RR的区别 1、了解事务 MySQL内…

【C语言必刷题】3.二分查找

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有…

成功靠运气还是能力?我写了一个运气模拟器,告诉给你答案

前端训练营&#xff1a;1v1私教&#xff0c;终身辅导计划&#xff0c;帮你拿到满意的 offer。 已帮助数百位同学拿到了中大厂 offer。欢迎来撩~~~~~~~~ 视频版可直接访问&#xff1a;https://www.bilibili.com/video/BV1ct421b7Q7/?vd_source391a8dc379e0da60c77490e3221f097a…

oauthlib,一个强大的 Python 身份校验库!

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站零基础入门的AI学习网站~。 目录 ​编辑 前言 什么是 OAuthLib&#xff1f; 安装 OAuthLib OAuthLib 的主要功能 OAuthLib 的用法 实现…

自己动手写编译器:使用 PDA 实现增强和属性语法的解析

在前面章节中我们了解了增强语法和属性语法&#xff0c;特别是看到了这两种语法的结合体&#xff0c;本节我们看看如何使用前面我们说过的自顶向下自动机来实现这两种语法结合体的解析&#xff0c;这里使用的方法也是成熟编译器常用的一种语法解析算法。 首先我们先给出上一节…

区块链金融科技:技术融合与挑战应对【文末送书-16】

文章目录 前言一.区块链与金融科技的融合&#xff1a;革新金融格局的技术之光1.1区块链技术简介1.2 区块链在金融科技中的应用 二.智能合约2.1 去中心化金融&#xff08;DeFi&#xff09;2.2区块链对金融科技的影响2.3数据安全性 三.区块链与金融科技【文末送书-16】3.1 粉丝福…

如何训练Ai把古诗《如梦令》描写的意境画出来?

常记溪亭日暮&#xff0c;沉醉不知归路。兴尽晚回舟&#xff0c;误入藕花深处。争渡&#xff0c;争渡&#xff0c;惊起一滩鸥鹭。 古诗《如梦令》以其优美的语言和丰富的意境给人留下深刻的印象。今天&#xff0c;我们将借助AI的力量&#xff0c;将这首诗的意境转化为视觉画面…

x86使用页表实现虚拟内存原理分析---使用代码分析

分页机制 这一部分在手册第四章 视频讲解可以看这一个课程 在不使用分页机制的时候, 我们看到的是物理内存, 物理内存有多大, 我们就可以使用多大的内存 使用内存分页机制, 我们就可以扩充访问的地址范围, 也可以实现权限的细分, 实际上就是实现虚拟内存, 将地址进行映射, 看到…

希尔排序算法

目录 ShellSort希尔排序 整体思路 图解分析 【1】预排序 单组排序 多组并排 【2】直接插入排序 关于gap取值 总代码实现 时间复杂度 ShellSort希尔排序 希尔排序法又称缩小增量法。 希尔排序法的基本思想是&#xff1a;先选定一个整数&#xff0c;把待排序文件中所有…

产品经理学习-产品运营《流程管理》

如何进行流程管理 信息可视化 甘特图-流程管理思维导图-方案讨论原型图-活动文档 明确责任制 分工明确&#xff0c;关键环境有主负责人通过时间倒推督促管理 沟通技巧 明确共同利益以结果激励做好信息同步 如何进行监控活动效果 监控活动的效果是要监控数据 活动每个环境的…

MySQL学习记录——십일 索引

文章目录 1、了解索引2、聚簇、非聚簇索引3、操作1、主键索引2、唯一键索引3、普通索引4、注意事项 4、全文索引 1、了解索引 MySQL服务器是在内存中的&#xff0c;所有数据库的CURD操作都是在内存中进行&#xff0c;索引也是如此。索引是用来提高性能的&#xff0c;它通过组织…

[嵌入式系统-16]:RT-Thread -2- 主要功能功能组件详解与API函数说明、API参考手册入口

目录 一、RT-Thread主要功能组件 二、内核组件 2.1 概述 2.2 API 三、设备驱动 3.1 概述 3.2 API 四、通信组件 4.1 概述 4.4 API 五、网络组件 5.1 概述 5.2 API 5.3 补充&#xff1a;MQTT协议 六、文件系统 6.1 概述 6.2 API 七、GUI 组件 7.1 概述 7.2 …

进程终止与进程等待

fork 函数 fork 函数是 Linux 中一个非常重要的函数&#xff0c;它的作用是从已存在的进程中创建一个新进程。这个新进程就是当前进程的子进程。 fork() 函数使用方法&#xff1a;它在头文件 #include <unistd.h> 中&#xff0c;函数原型为 pid_t fork(void); 用一个…