【qbxt!】提高基础导学案
7.15准备去qbxt提高基础班被吊打了
一、 基础算法(枚举、模拟、贪心、分治)
【简介】
枚举、模拟、贪心、分治是最基础也是最需要打好基础的几个算法,这些题目普遍分布在 NOIP 的前两题,代码难度较低,学好这些算法不但是拿到 NOIP 保底分的保障,同时也能够帮助你更好的分析部分综合题。
不能因为这一块的相对简单而忽视了他们的重要性,相反的,选手的目标并不局限于掌握算法与会做题目上,更要同时借这个机会提升自己的思考问题的速度、对题目的敏感程度、写代码的速度、调试程序的能力等多维代码能力,为以后的学习打下牢固的基础。
【学习要点】
- 对于枚举和模拟,一定要多写多练,锻炼自己写代码的速度和正确性,保证用最快的时间完成正确的代码。
- 贪心题要靠一定题量的积累,选手通过掌握一些贪心的定式达到举一反三的效
果。
- 需要掌握基本分治思想、同时准备自己的二分和三分模板,做到写二分这种题时形成一种套路和定式,减少自己的出错概率。
- 养成一个良好的读题习惯,题目中的每句话都可能十分关键,尤其是题目结尾样例数据和数据范围约定以及可能存在的注释部分,更是尤为重要。
- 养成一个良好的代码习惯,首先确认算法的正确性,再理清楚代码的逻辑结构,最后再写代码,急于动手一般会导致你浪费更多的时间在写代码中途的迷茫和写完后永无止境的调试中。
【学习难点】
- 模拟题的难度一般集中在如何理解题意上,所以要培养自己对题目的阅读能力,对样例数据的分析能力,做到看见长题目心里不慌,写长代码思维逻辑强不混乱。
- 贪心题的难点在于贪心算法本身的正确性,即大胆猜想,小心求证,在寻找规律时一定要足够大胆,但是找到的规律本身一定要符合逻辑,在面对自己提出的算法时,应从两个角度去考虑:i) 尝试为自己的算法找一个合逻辑的解释;ii) 反复寻找可能存在的反例去反向验证。而掌握大量的套路,可以快速看出题目的套路来源,就能很快找到一个合理逻辑。
- 对分治题的要求体现在两点:i) 能正确的写出分治代码,对分治算法的框架有一个清晰的掌握并有一个的漂亮实现;ii) 分治题一般都有很明显的特征,通过题目的积累能慢慢对分治的题型有个大致了解,在遇到新的分治题的时候能迅速意识到此题的算法应该是一个分治,帮助你有一个正确的思考导向,题目就已经完成了一半(在二分题上尤为明显)
【例题】
- 蛇形矩阵(CODEVS 1160)
- 均分纸牌(2002 年 NOIP 提高组)(CODEVS 1098)
- 线段覆盖(CODEVS 1214)
- 国王游戏(2013 年 NOIP 提高组)
- 跳石头(2015 年 NOIP 提高组)
一、 基础算法(枚举、模拟、贪心、分治)
【简介】
枚举、模拟、贪心、分治是最基础也是最需要打好基础的几个算法,这些题目普遍分布在 NOIP 的前两题,代码难度较低,学好这些算法不但是拿到 NOIP 保底分的保障,同时也能够帮助你更好的分析部分综合题。
不能因为这一块的相对简单而忽视了他们的重要性,相反的,选手的目标并不局限于掌握算法与会做题目上,更要同时借这个机会提升自己的思考问题的速度、对题目的敏感程度、写代码的速度、调试程序的能力等多维代码能力,为以后的学习打下牢固的基础。
【学习要点】
- 对于枚举和模拟,一定要多写多练,锻炼自己写代码的速度和正确性,保证用最快的时间完成正确的代码。
- 贪心题要靠一定题量的积累,选手通过掌握一些贪心的定式达到举一反三的效
果。
- 需要掌握基本分治思想、同时准备自己的二分和三分模板,做到写二分这种题时形成一种套路和定式,减少自己的出错概率。
- 养成一个良好的读题习惯,题目中的每句话都可能十分关键,尤其是题目结尾样例数据和数据范围约定以及可能存在的注释部分,更是尤为重要。
- 养成一个良好的代码习惯,首先确认算法的正确性,再理清楚代码的逻辑结构,最后再写代码,急于动手一般会导致你浪费更多的时间在写代码中途的迷茫和写完后永无止境的调试中。
【学习难点】
- 模拟题的难度一般集中在如何理解题意上,所以要培养自己对题目的阅读能力,对样例数据的分析能力,做到看见长题目心里不慌,写长代码思维逻辑强不混乱。
- 贪心题的难点在于贪心算法本身的正确性,即大胆猜想,小心求证,在寻找规律时一定要足够大胆,但是找到的规律本身一定要符合逻辑,在面对自己提出的算法时,应从两个角度去考虑:i) 尝试为自己的算法找一个合逻辑的解释;ii) 反复寻找可能存在的反例去反向验证。而掌握大量的套路,可以快速看出题目的套路来源,就能很快找到一个合理逻辑。
- 对分治题的要求体现在两点:i) 能正确的写出分治代码,对分治算法的框架有一个清晰的掌握并有一个的漂亮实现;ii) 分治题一般都有很明显的特征,通过题目的积累能慢慢对分治的题型有个大致了解,在遇到新的分治题的时候能迅速意识到此题的算法应该是一个分治,帮助你有一个正确的思考导向,题目就已经完成了一半(在二分题上尤为明显)
【例题】
- 蛇形矩阵(CODEVS 1160)
- 均分纸牌(2002 年 NOIP 提高组)(CODEVS 1098)
- 线段覆盖(CODEVS 1214)
- 国王游戏(2013 年 NOIP 提高组)
- 跳石头(2015 年 NOIP 提高组)
-
数学题的知识点分布很细很“杂”。除了上面整理的大块、成系统的的知识点以外,还有很多各式的小结论需要在平时学习的过程中去学习和记忆。但和单纯的数学不同的是,NOIP中的数学并不是非常在意结论的正确性,而更在意如何去使用一个结论。就像做数学题时,并不关心数学公式如何被证明,更关心一个正确的数学公式如何通过正确的变形去解题。所以可以不去死磕一个结论的正确性证明。
【知识点清单】
- 高精度
- 排列组合数,进制转换,Lucas 定理
- 容斥原理
- gcd 算法、exgcd 算法以及裴蜀定理
- 逆元、解同余方程组(中国剩余定理)
- 线性筛求素数
- 欧拉函数、欧拉定理、费马小定理、线性筛求欧拉函数
- 卡塔兰数、斯特林数
【学习重点】
- 通过题目去不断学习以上各种算法的变形与实际运用。
- 掌握每个定理的性质,便于在做题的时候通过联想得到解。
- 准备属于自己的数论模板(尤其是高精度和 exgcd),将每个数论算法都熟背。
- 注意 long long 和取模的问题。
- 高精度除法(取模)的正确实现,高精度压位操作的实现。
- 组合数的各种计算方式(杨辉三角,Lucas 定理,以及计算 n!的逆元)
- 如何利用中国剩余定理解决模数不是素数时的同余方程?
【例题】
- 大质数 2(CODEVS 1675)
- 基因变异(CODEVS 3194)
- 同余方程(NOIP2012 提高组)(CODEVS 1200)
- 小凯的疑惑(NOIP2017 提高组)
- 青蛙的约会(POJ1061)
- 礼物(CODEVS 1321)
- 愚蠢的组合数(CODEVS 1504)
- 麦森数(CODEVS 1087)
- 统计公共子序列个数(CODEVS 1778)
四、 字符串算法
【简介】
字符串算法主要针对 NOIP 中可能出现的字符串题,而字符串题在 NOIP 中算是一块独立的大题,这类题的特点就是没有掌握对应的字符串算法,虽然能完全理解题目的意思,但依旧寸步难行,完全没有任何思路。字符串的每一个算法几乎都是高度凝练的智慧结晶,十分值得我们去理解,当然从解题的角度去看,我们依旧需要背诵所有的字符串算法代码,毕竟很难仅通过自己的理解去重现这些算法。【知识点一览】
- KMP(字符串匹配)
- TRIE(字典树)
- HASH
【重难点一览】
- 最最基本的,找到适合自己的字符串读入输出处理方式。
- 难点集中在对 KMP 整个算法的理解上,KMP 算法有很多巧妙的应用,所以不能只是单纯去背诵其代码,要对整个算法有清晰的理解,以及了解对 next 数组的多角度解释。
- 一定要掌握 HASH 算法,有很多字符串的题目都能用字符串 HASH 解决,学会在题目中积累 HASH 的经验,背诵一个 HASH 模板,以及学会双 HASH 值、HASH 挂链等最基本的技巧。
【例题】
- Poj 3080 Blue Jeans
- Poj 2406 Power Strings
- Poj 2752 Seek the Name, Seek the Frame
- Poj 1743 Musical Theme
- Hdu 4821 String
- NOI2014 动物园
五、 图论(图、树)
【简介】
这一章主要介绍一些进阶的图论算法,而每个图论算法都是一类图论题的核心,这就要求选手掌握每一个图论算法的实现。同时,由于图论题的灵活性,经常会对算法进行一定程度的变形和利用,这就要求选手对每个图论算法的思路有着清晰的掌握。
大体上 NOIP 的图论题目多可以分为三类:
- 考察图论算法本身性质的(如利用三角形不等式的差分约束,负权回路,最小长度环等)
- 难点集中在如何对原图进行转化的,或如何建模形成一个图
- 综合题,图论算法和其他算法的结合,图论算法只是为了更好的引出其他
算法
【知识点一览】
- 图的基本存储
- 最小生成树
- 最短路算法
- 有向图的拓扑排序
- 树上倍增
【难点一览】
- dijkstra 的堆优化,SPFA 的 SLF 优化
- 差分约束问题
- 如何改进最短路算法来得到一个次短路算法
- 如何求一个次小生成树
- 如何利用 Floyd 算法求一个最小长度环
- 如何利用 SPFA 判定一个负环
【例题】
- CODEVS 1231 最优布线问题
- Car 的旅行线路(NOIP2001)(CODEVS 1041)
- BZOJ 1977 次小生成树
- Poj 1201 Intervals
- Poj 3621 Sightseeing Cows
- 最最基本的,找到适合自己的字符串读入输出处理方式。
- 难点集中在对 KMP 整个算法的理解上,KMP 算法有很多巧妙的应用,所以不能只是单纯去背诵其代码,要对整个算法有清晰的理解,以及了解对 next 数组的多角度解释。
- 一定要掌握 HASH 算法,有很多字符串的题目都能用字符串 HASH 解决,学会在题目中积累 HASH 的经验,背诵一个 HASH 模板,以及学会双 HASH 值、HASH 挂链等最基本的技巧。
【例题】
- Poj 3080 Blue Jeans
- Poj 2406 Power Strings
- Poj 2752 Seek the Name, Seek the Frame
- Poj 1743 Musical Theme
- Hdu 4821 String
- NOI2014 动物园
五、 图论(图、树)
【简介】
这一章主要介绍一些进阶的图论算法,而每个图论算法都是一类图论题的核心,这就要求选手掌握每一个图论算法的实现。同时,由于图论题的灵活性,经常会对算法进行一定程度的变形和利用,这就要求选手对每个图论算法的思路有着清晰的掌握。
大体上 NOIP 的图论题目多可以分为三类:
- 考察图论算法本身性质的(如利用三角形不等式的差分约束,负权回路,最小长度环等)
- 难点集中在如何对原图进行转化的,或如何建模形成一个图
- 综合题,图论算法和其他算法的结合,图论算法只是为了更好的引出其他
算法
【知识点一览】
- 图的基本存储
- 最小生成树
- 最短路算法
- 有向图的拓扑排序
- 树上倍增
【难点一览】
- dijkstra 的堆优化,SPFA 的 SLF 优化
- 差分约束问题
- 如何改进最短路算法来得到一个次短路算法
- 如何求一个次小生成树
- 如何利用 Floyd 算法求一个最小长度环
- 如何利用 SPFA 判定一个负环
【例题】
- CODEVS 1231 最优布线问题
- Car 的旅行线路(NOIP2001)(CODEVS 1041)
- BZOJ 1977 次小生成树
- Poj 1201 Intervals
- Poj 3621 Sightseeing Cows
- 了解二叉搜索树和平衡树有助于理解 set 和 map
- 了解位运算有助于理解 bitset
【基本知识点清单】
- stack——<stack>
- queue、priority_queue——<queue>
- deque——<deque>
- map——<map>
- set——<set>
- bitset——<bitset>
- <algorithm>