作为一个oier,适当的整理是有必要的。蒟蒻根据自己的理解,筛选出考noip应当掌握的知识点。可能后期还有解题思路和模板,先挖个坑慢慢补呗。

60级张炳琪Noip知识点总结

可能是本人比较弱,写的内容比较简单,主要是应对noip知识点的覆盖。其实感觉noip大多还是考思维(可能大佬们认为不需要思考。。)

.知识点

(一).暴力求解法

1.模拟算法,模拟模型建立

2. dfs洪水模型  迷宫模型  最优性可行性剪枝,记忆化搜索

3. bfs    双向宽搜    判重的方法

4.枚举法

(二)图论相关

1. 最短路算法,堆优化迪杰斯特拉,floyed,SPFA

2. 最小生成树 kruskal     prim算法

3.缩点强联通分量  tarjan算法

4.图的遍历,二分图的区分和构造,匈牙利算法

5.哈密顿回路和欧拉回路

6.拓扑排序

(三)数论相关

1. 欧几里得,扩展欧几里得算法

2. 质数判断  质数筛法

3. 排列组合问题  杨辉三角

4. 容斥原理

5. 进制转换

6. 高精度  压位高精

7. 快速幂  快速乘法

(四)数据结构相关

1.树形结构:树的构造和三种遍历,无根树转有根树。树上求LCA的方法。堆,优先                              队列。并查集,加权并查集。

2.线性结构:栈,队列,单调栈,单调队列,链表,双端队列。

3.高级结构:线段树,树状数组,平衡树

(五)动态规划

1.背包dp      01,完全,多重,分组,依赖性

2.区间dp      合并石子

3.树形dp

4.状压dp(初状态的确定)

5.线性dp

6.棋盘dp

7.其他常用dp模板:最长上升子序列,最长公共子序列,最大权值正方形,最大全            0/全1正方形,最大连续子段和,期望dp,概率dp

(六)常用算法和思想

1.前缀和思想,差分思想

2.二分答案 分治算法  归并排序思想  求逆序对

3.倍增思想和算法           LCA

4.贪心思想 活动安排,线段覆盖,最大连续子段和

(七)字符串相关

1.回文串

2.字符串模拟

3.字符串哈希

4.kmp算法

.解题思路

(一).暴力求解法。

1.模拟算法:低级形态的模拟即为根据题目所说的来做,稍微难一些的模拟要在模拟中进行简化时空复杂度,或者从现象中挖掘出更加便利的模拟方法。较为困难的模拟一般掺杂着其他算法。模拟过程中可能有很多细节问题,比如像边界问题和不同板块之间的联系,所以做的时候要细心一点。典型例题:历年来D1T1;

2.dfs算法:打暴力的必备算法,也是用来对拍的标准算法。在用来打对拍时可以枚举所有的状况以保证正确率。其他的情况一般要加上各种剪枝以及优化。

(1):最优化剪枝,将肯定得不到更优答案的情况剪去

(2):记忆化搜索,在某些条件固定的情况下状态也固定,用记忆化搜索来优化,不会dp的时候可以拿来使用。典型例题:滑雪

(3):迭代加深搜索

(4):进行有计划的搜索,不盲目搜索来减少状态,对后来状态进行估价。典型例题:靶形数独。

(5):dfs中添加其他算法,比如贪心和dp 典型例题:引水入城,斗地主

3.bfs算法:在较裸的题目中一般表现为求最优情况,最小步数。Bfs用处也比较广,在spfa,拓扑排序,dinic等算法中有相当的用处。弱点是储存状态可能需要大量的空间,判断重复状态也比较麻烦。

(二).图论相关

1.最短路:spfa可以有负边,迪杰斯特拉不可以,但是spfa也不可以判负环。一般情况下spfa时间不会被卡,但是据说最稳定的是堆优化迪杰斯特拉

2.最小生成树:克鲁斯卡尔可以应对大部分情况,prim要懂得原理,有些题目要依靠他的思想。

3.强连通分量:Tarjan的板子一定要熟,出栈时的常见操作要掌握。一般求强连通分量是为了缩点,来进行其他操作。

4.图的遍历:可以采用宽搜和广搜的方法,可以采用深搜的方法对图进行染色,染色就涉及了二分图的构造。二分图匹配可以用网络流来写。

5.哈密顿回路和欧拉回路:欧拉回路应用较广,很多题目可以构造成欧拉回路的模型(尽管原题根本看不出),欧拉回路奇数点只能有2或0个。

6.拓扑排序:注意是满足无后效性的,某些dp会用到。

(三).数论相关

1.gcd,exgcd:欧几里得算法很多公式要用,求最大公约数和最小公倍数,扩欧可以用来求逆元,求不定方程的解。

2.质数相关:掌握素数判定和筛法应该就可以了。

3.排列组合问题:学会用杨辉三角和公式求组合数应该就够用了

4.容斥原理:在计数时,必须注意没有重复,没有遗漏。为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理

5.进制转换:注意十进制以上的大写字母表示,模拟进行

6.高精度:一般采用四位的压位,但是这代表着要处理好输出,头位的正常输出,其他的要输出四位

7.快速幂:一般采用循环的快速幂写法,慢速乘法是为了防止在乘法过程中爆掉数据范围。

(四):数据结构相关

1.树形结构:一定要熟练掌握求lca的倍增算法,并且尝试去构造模型。无根树转有根树随便找一个点作为根节点dfs一边就可以。并查集的使用有时候可以起到神奇的功效。。

2.线性结构:栈一般手写,队列用stl即可。Vector存图在大数据的时候会有比较好的效果。比较难的是单调数据结构了。单调队列优化最长上升子序列,合并石子。单调栈低等级的时候模拟较多,单调性的结构可以进行二分查找。

3.高级结构:线段树用处挺大且比较好写,不过在noip中用处并不是很大。树状数组和平衡树我的水平还只是停留在模板。所以呢万一noip出数据结构题,我就直接分块暴力吧。

(五):动态规划

动态规划的一个重要步骤就是确定状态,确定好状态后即使不会写方程还能写记忆化呢。其实动态规划推导除了多做题就是靠灵性。。。在推导的时候可以先用小数据试一下看看是怎么得来的,然后再尝试推导出普遍规律,或者将其对应到之前做过的某些题目上去。动态规划有些题目的初始赋值很坑尤其是某些区间dp和状压dp,刚开始都是要赋很多初始值的,一定要考虑清晰。建议把某些常见的dp模型记住,有时候会有很大用处。

(六):常用思想

1.前缀和和差分:前缀和一旦使用可以减少一个指数级的复杂度,当题目中出现大量的区间求和时可以考虑前缀和。差分不太懂,就不扯了。

2.二分思想,分治算法:二分答案是用处相当大的一个技巧可以优化一个log,二分答案能做的题目首先要满足答案的单调性,还要保证给出答案能够验证答案的正确性。满足这两个条件就可以二分答案求解。分治算法是一种比较神奇的算法,一般在普及组中会有分治模拟题。分治思想是将大问题化成小问题,然后到了很小的问题将其解决然后合并。。

3.贪心思想:贪心思想进可用来写正解,退可用来打暴力骗分。贪心算法有很多模型,包括那四五个线段覆盖,活动安排啥的。在考试的时候很多时候要将自己想出的贪心和暴力对拍验证正确度。

4.倍增思想:近年来noip挺常考的内容,旨在通过二进制跳跃来优化时间复杂度,倍增求 Lca是必须掌握的内容。

(七)字符串

1.回文串:没啥好说的,判断是否的话两个指针一扫,找的话用马拉车就行。

2.字符串模拟:string里的一些函数可以给人极舒适的体验,我常用的是substr函数可以既方便的生成子串。其他的插入等函数也很方便。

3.字符串哈希:可以采用大质数取模法也可以考虑自然溢出,我们认为两个字符串的哈希值相同代表这两个字符串是相同的,这就代表我们在字符串哈希处理时要多留心。一般来说每一位乘以一个质数就是可以的(但最好不要用某些常见质数)。

4.kmp算法:一种字符串匹配算法,时间复杂度较优,模板比较好背,一般也没见过在noip中非要用的。

~未完待续  很多口胡不准确见谅。

三.模板以及模板题

Noip知识点备考的更多相关文章

  1. NOIp知识点复习——最短路计数

    $Mingqi\_H$ NOIp 2017考挂了...gg 重新开始好了. 计划明年2月24号前复习完所有的NOIp知识点(毕竟很不熟练啊),之后到七月底前学习完省选的东西(flag?). 从现在开始 ...

  2. noip知识点总结之--贪心

    一.什么是贪心 贪心算法嘛... 就是在对某个问题求解时,总是做出在当前看来是最好的选择 In other wors,并不是从整体最优上加以考虑,而是在获得某种意义上的局部最优解 二.贪心算法的适用前 ...

  3. noip知识点总结之--欧几里得算法和扩展欧几里得算法

    一.欧几里得算法 名字非常高大上的不一定难,比如欧几里得算法...其实就是求两个正整数a, b的最大公约数(即gcd),亦称辗转相除法 需要先知道一个定理: gcd(a, b) = gcd(b, a  ...

  4. NOI&&NOIP知识点集萃

    更新日志 \(update:2019-3-4\) 更新了自为风月马前卒的后缀数组(省选不到一个月了,我才开始学后缀数组怕是要凉凉) \(update:2019-2-21\) 更新了一篇李超线段树的讲解 ...

  5. noip知识点总结之--线性筛法及其拓展

    一.线性筛法 众所周知...线性筛就是在O(n)的时间里找出所有素数的方法 code: void get_prime(int N){ int i, j, k; memset(Flag, ); ; i ...

  6. NOIP知识点

    基础算法 贪心 枚举 分治 二分 倍增 高精度 模拟 图论 图 最短路(dijkstra.spfa.floyd) 最小生成树(kruskal.prim) 并查集 拓扑排序 二分图染色 Tarjan 树 ...

  7. NOIP系列复习及题目集合

    首先是我的酱油记了啦~: Xs的NOIP2014酱油记,持续更新中 知识点方面: noip知识点总结之--贪心 noip知识点总结之--线性筛法及其拓展 noip知识点总结之--欧几里得算法和扩展欧几 ...

  8. NOIP考点

    NOIP考点 基础算法 图 树 数论 数据结构 动态规划 搜索 其他算法 省选知识点汇总 图论 数据结构 字符串相关算法及数据结构 数学 计算几何 搜索 动态规划 其他算法 转自:巨佬的博客 加*号是 ...

  9. bzoj 2142

    数论大集合 只要你做完了这道题,除了线性筛和降幂公式以外,所有数论noip知识点就都会了... 题意:求C(n,∑w)*C(∑w,w1)*C(∑w-w1,w2).....mod p(不保证p为质数) ...

随机推荐

  1. Linux运维学习笔记-iptables知识总结

  2. .NET练习计算平方根

    1.新建Windows窗体 2.窗体中添加控件:TextBox(文本框).Button(按钮).和Label(标签) 3.为Button对象添加点击事件代码 点击事件代码设计思路 ①从文本框中获取输入 ...

  3. Unity 3D游戏-贪吃蛇类游戏源码:重要方法和功能的实现

    贪吃蛇类游戏源码 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 头部移动方式 2 生成 Shit 道具 ...

  4. 只需 5 秒钟,你就能取到 WPF 程序的超高分辨率超高清截图

    我想要截取一个 WPF 程序的图标,但是它太小了.如果我就这样截屏截下来,是很不高清的.由于我需要制作一份课件,所以我需要超高清版本,可是,如何做才能最快速拿到 WPF 程序的超高清截图呢? 本文分享 ...

  5. 定时器setTimeout()的传参方法

    更具体的代码:http://www.cnblogs.com/3body/p/5416830.html // 由于setTimeout()的延迟执行特性,所以在执行的函数中直接使用外部函数的变量是无法获 ...

  6. jQuery插件制作方法详解

        jQuery插件制作方法详解   jquery插件给我的感觉清一色的清洁,简单.如Jtip,要使用它的功能,只需要在你的元素的class上加 上Jtip,并引入jtip.js及其样式即可以了. ...

  7. 使用webpack搭建vue项目中遇到的问题

    1:data数据文件经试验,需要放在生成的build文件夹中才能生效,但是应该把data文件夹先放在src中,然后如何定义config文件,让其复制过去? new CopyWebpackPlugin( ...

  8. ballerina 学习二十九 数据库操作

    ballerina 数据操作也是比较方便的,官方也我们提供了数据操作的抽象,但是我们还是依赖数据库驱动的. 数据库驱动还是jdbc模式的 项目准备 项目结构 ├── mysql_demo │ ├── ...

  9. dbt- 数据构建工具

    dbt(数据构建工具)是一个命令行工具,只需编写select语句即可转换仓库中的数据. dbt处理将这些select语句转换为表和视图.DBT帮助做T的ELT(提取,加载和转换) 的过程-它不提取或加 ...

  10. JVM 详解

    概念 数据类型 Java 虚拟机中,数据类型可以分为两类:基本类型和引用类型.基本类型的变量保存原始值,即:他代表的值就是数值本身:而引用类型的变量保存引用值.“引用值”代表了某个对象的引用,而不是对 ...