• Noip知识点备考


    作为一个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中非要用的。

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

    三.模板以及模板题

  • 相关阅读:
    2017-2018-1 20155232 20155215《信息安全技术》实验四—— 木马及远程控制技术
    ## 2017-2018-1 20155232 实验三 实时系统
    # 2017-2018-1 20155232 《信息安全系统设计基础》第九周学习总结
    linux pwd指令C实现
    2017-2018-1 20155232 《信息安全系统设计基础》第八周学习总结以及课下补做
    2017-2018-1 20155232 《信息安全系统设计基础》第七周学习总结
    2017-2018-1 20155232 20155215 实验二 固件程序设计
    # 2017-2018-1 20155232 《信息安全系统设计基础》第六周学习总结
    # 2017-2018-1 20155232《信息安全技术》实验二——Windows口令破解
    # 2017-2018-1 20155232 《信息安全系统设计基础》第五周学习总结
  • 原文地址:https://www.cnblogs.com/luoyibujue/p/7327443.html
Copyright © 2020-2023  润新知