算法竞赛入门

前言

因为最近指导一些朋友入门算法竞赛,颇有心得 懒得以后复述,不妨写篇博客。

适用于OI / ACM

第零阶段

建议使用codeblocks,vscode,sublime,vim,emacs等编辑器或者IDE。不建议使用dev!不建议使用dev!不建议使用dev!

各大OJ介绍:OJ就是online judge,在线做题网站。

第一阶段

这一阶段主要是学习语法和简单的模拟。

要求:

熟练使用函数,结构体,高维数组,循环语句等。

自我感觉能够把编程语言当一门工具来使用。

掌握基础的debug方法,如输出调试等。

第二阶段

这一阶段学习简单算法。

这里开始要明确算法竞赛中的几大板块:数学(数论,组合计数,概率期望,线性基等),图论,树论,字符串,数据结构,DP,其他。

目标,掌握二分,枚举,dfs,bfs,树和图的储存方式,树的遍历,gcd,埃氏筛,简单线性DP,前缀和与差分,并查集。

会使用桶,栈,队列。

这一阶段主要是起到了一个引入和过渡的作用。

第三阶段

这里需要学大量的重要算法,同时代码能力会得到提高。

需要学会的知识如下:

数据结构:线段树,树状数组。

DP:多维DP,树形DP。

图论:最短路的三种算法,分层图,最小生成树,tarjan。

树论:树的简单信息统计(如深度,子树大小),树上差分。

字符串:字符串hash,kmp。

数论:gcd,exgcd,crt,线性筛素数,线性求逆元。

组合计数:组合数,lucas定理。

概率期望:简单的概率期望DP。

其他:STL(set,优先队列,map),对拍。

这一部分完成后,普通题目应该都不成问题。

第四阶段

学习各种经典高级算法,如点分治,整体二分,树套树,主席树,多项式算法(FFT,分治FFT...)等。目标是能够解决正常省选难度的题。

第五阶段

紧跟时事,学习当下热门算法与套路。

posted @ 2020-12-19 01:10  huyufeifei  阅读(65)  评论(0编辑  收藏