您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > NOIP复习资料(C++版)
前言0(C++版)NOIP复习资料主编葫芦岛市一高中李思洋完成日期2012年8月27日前言1前言有一天,我整理了NOIP的笔记,并收集了一些经典算法。不过我感觉到笔记比较凌乱,并且有很多需要修改和补充的内容,于是我又搜集一些资料,包括一些经典习题,在几个月的时间内编写出了《NOIP复习资料》。由于急于在假期之前打印出来并分发给同校同学(我们学校既没有竞赛班,又没有懂竞赛的老师。我们大家都是自学党),《NOIP复习资料》有很多的错误,还有一些想收录而未收录的内容。在“减负”的背景下,暑期放了四十多天的假。于是我又有机会认真地修订《NOIP复习资料》。我编写资料的目的有两个:总结我学过(包括没学会)的算法、数据结构等知识;与同学共享NOIP知识,同时使我和大家的RP++。大家要清醒地认识到,《NOIP复习资料》页数多,是因为程序代码占了很大篇幅。这里的内容只是信息学的皮毛。对于我们来说,未来学习的路还很漫长。基本假设作为自学党,大家应该具有以下知识和能力:①能够熟练地运用C++语言编写程序(或熟练地把C++语言“翻译”成Pascal语言);②能够阅读代码,理解代码含义,并尝试运用;③对各种算法和数据结构有一定了解,熟悉相关的概念;④学习了高中数学的算法、数列、计数原理,对初等数论有一些了解;⑤有较强的自学能力。代码约定N、M、MAX、INF是事先定义好的常数(不会在代码中再次定义,除非代码是完整的程序)。N、M、MAX针对数据规模而言,比实际最大数据规模大;INF针对取值而言,是一个非常大,但又与int的最大值有一定差距的数,如100000000。对于不同程序,数组下标的下限也是不同的,有的程序是0,有的程序是1。阅读程序时要注意。阅读顺序和方法没听说过NOIP,或对NOIP不甚了解的同学,应该先阅读附录E,以加强对竞赛的了解。如果不能顺利通过初赛,你就应该先补习初赛知识。这本《NOIP复习资料》总结的是复赛知识。如果没有学过C++语言,应该先选择一本C++语言教材。一般情况下,看到“面向对象编程”一章的前一页就足够了(NOIP不用“面向对象编程”,更不用摆弄窗口对话框)。附录G介绍了一些书籍和网站。你应该选择一本书,认真地学习。再选择一个网站,作为练习的题库。第一单元对竞赛中常用的操作和简单的算法分析进行了总结,算作对C++语言的巩固。同时,阅读这一单元之后,你应该选择一个合适的C++代码编辑器。第二到第六单元介绍了竞赛常用的算法。阅读每一章时,应该先阅读“小结”——名曰“小结”,实际上是“导读”。这五个单元除了经典习题,还有某些思想和算法的具体实现方法。这些信息可能在明处,也可能在暗处,阅读时要注意挖掘和体会。如果有时间,应该在不看解析和代码的前提下独立完成这些题。第七单元是第六单元的一个部分,由于它的内容来自《背包九讲》,所以单独放在一个单元。从第八单元开始,到第十三单元,基本上就没有习题了。换句话说,该“背课文”了。第八单元介绍了常用的排序算法。你可以有选择地学习,但一定要掌握“STL算法”和“快速排序”。第九单元介绍了基本数据结构,你一定要掌握第九单元前五小节的内容(本单元也有应该优先阅读的“小结”)。有余力的话,第六小节的并查集也应该掌握。前言2第十单元介绍了与查找、检索有关的数据结构和算法。你也可以有选择地学习。第十一单元与数学有关。数学对于信息学来说具有举足轻重的地位。标有“!”的应该背下来,至于其他内容,如果出题,你应该能把它解决。第十二单元仍与数学有关。第十三单元是图论。学习时要先阅读“小结”,把概念弄清楚。之后要掌握图的实现方法。接下来要掌握一些经典图论算法:Kruskal算法、Dijkstra算法、SPFA、Floyd算法、拓扑排序。附录F总结了2004年以来NOIP考察的知识点,可以作为选择性学习的参考。在学习算法和数据结构的同时,应该阅读和学习附录A。如果你还有余力,你应该学习第十四单元。第十四单元的内容不是必须要掌握的,但是一旦学会,可以发挥C++语言的优势,降低编程复杂度。临近竞赛时,应该阅读附录B和附录C,以增加经验,减少失误。面临的问题1.这是复赛复习资料——需要有人能用心总结、整理初赛的知识,就像这份资料一样。2.潜在的问题还是相当多的,只是时间不够长,问题尚未暴露。3.部分代码缺少解说,或解说混乱。4.个人语文水平较差,《资料》也是如此。5.没有对应的Pascal语言版本。如果有人能为P党写一个Pascal版的STL,他的RP一定会爆增!6.希望有人能用LATEX整理《资料》,并以自由文档形式发布。最后,欢迎大家以交流、分享和提高为目的修改、复制、分发本《资料》,同时欢迎大家将《资料》翻译成Pascal语言版供更多OIer阅读!谢谢大家的支持!葫芦岛市一高中李思洋2012年8月27日目录I目录标题上的符号:1.!:表示读者应该熟练掌握这些内容,并且在竞赛时能很快地写出来。换句话说就是应该背下来。2.*:表示内容在NOIP中很少涉及,或者不完全适合NOIP的难度。3.#:表示代码存在未更正的错误,或算法本身存在缺陷。前言...........................1目录...........................I第一单元C++语言基础..............11.1程序结构......................11.2数据类型......................41.3运算符........................61.4函数..........................81.5输入和输出!....................91.6其他常用操作!.................101.7字符串操作!...................131.8文件操作!....................131.9简单的算法分析和优化...........141.10代码编辑器...................16第二单元基础算法................172.1经典枚举问题..................172.2火柴棒等式....................182.3梵塔问题.....................192.4斐波那契数列..................192.5常见的递推关系!...............202.6选择客栈.....................222.72k进制数.....................232.8HealthyHolsteins...........242.9小结.........................25第三单元搜索...................273.1N皇后问题....................273.2走迷宫.......................293.38数码问题....................313.4埃及分数.....................343.5Mayan游戏...................363.6预处理和优化..................403.7代码模板.....................413.8搜索题的一些调试技巧...........433.9小结.........................44第四单元贪心算法................464.1装载问题.....................464.2区间问题.....................464.3删数问题.....................474.4工序问题.....................474.5种树问题.....................474.6马的哈密尔顿链................474.7三值的排序....................494.8田忌赛马.....................504.9小结.........................50第五单元分治算法................515.1一元三次方程求解..............515.2快速幂......................515.3排序........................515.4最长非降子序列................535.5循环赛日程表问题..............535.6棋盘覆盖.....................545.7删除多余括号.................555.8聪明的质监员.................565.9模板........................585.10小结.......................59第六单元动态规划................606.1导例:数字三角形..............606.2区间问题:石子合并............636.3坐标问题.....................656.4背包问题.....................676.5编号问题.....................676.6递归结构问题.................686.7DAG上的最短路径..............716.8树形动态规划*................726.9状态压缩类问题:过河...........746.10Bitonic旅行...............766.11小结.......................77第七单元背包专题................787.1部分背包问题.................787.20/1背包问题!................787.3完全背包问题.................797.4多重背包问题.................797.5二维费用的背包问题............807.6分组的背包问题................817.7有依赖的背包问题..............817.8泛化物品.....................817.9混合背包问题.................827.10特殊要求....................827.11背包问题的搜索解法...........837.12子集和问题..................84第八单元排序算法................858.1常用排序算法.................858.2简单排序算法.................878.3线性时间排序.................888.4使用二叉树的排序算法*..........898.5小结........................90第九单元基本数据结构............91目录II9.1线性表(顺序结构).............919.2线性表(链式结构).............919.3栈..........................939.4队列.........................949.5二叉树.......................959.6并查集!......................999.7小结........................102第十单元查找与检索.............10410.1顺序查找...................10410.2二分查找!..................10410.3查找第k小元素!.............10510.4二叉排序树..................10610.5堆和优先队列*...............10810.6哈夫曼(Huffma
本文标题:NOIP复习资料(C++版)
链接地址:https://www.777doc.com/doc-6370978 .html