NOIP考纲总结+NOIP考前经验谈

首先来一张图,很直观(截止到2012年数据)html

 

下面是收集的一些,我改了一下算法

红色加粗表示特别重要,必须掌握
绿色加粗表示最好掌握,可能性不是很大,可是某些能够提升程序效率

编程

高精度
  a.加法
  b.减法
  c.乘法(应该只会有高精乘单精                               
  d.高精度除单精                 (后面c,d考的可能性较小,应该只考a,b)windows


排序算法
  a.选择排序
  b.插入排序
  c.hash排序
  d.归并排序(单纯的排序可能用不到,有快排就好了,可是归并排序的思想很重要)
  e.堆排序
  f.快排数组

字符串匹配算法
  a.蛮力法
  b.KMP缓存

数论
  a.欧几里德算法(用展转相除法求最大公约数)
  b.扩展欧几里德算法 ax+by=c 的正整数
  c.素数  O(sqrt(n)) 
  d.筛法求素数
  e.快速乘方(位运算+同余+高精)数据结构

树论
  a.二叉搜索树
  b.优先队列(C++中priority_queue,至关于手动维护的小(大)根堆的数据结构优化)
  c.线段树 (RMQ问题建议使用st算法)
  d.平衡树一种(建议学习SBT)框架

图论
  a.拓扑排序
  b.割顶,割边(桥) {O(n)}
  c.强连通分支  O(n)
  d.有向无回路图的最长路径
  e.欧拉回路
  f.最小生成树
    ① Prime  O(N2)
    ② Kruskal  O(M2
  g.次小生成树 {简单的删除最大边是不对的}
  h.最短路径
    ① Dijkstra
    ② Bellman-ford
    ③ spfa
    ④ flyod
    单源点最短路径算法推荐使用spfa(即便你习惯dijkstra),Dijkstra不能有负边不能有回路,因此用spfa更保险编辑器

计算几何 
  a.判断两条线段是否相交
  b.凸包算法  O(n)post

其余算法
  a.并查集
  b.RMQ
  ......

 

 

【COGS】NOIP临考经验

  1.  提早15分钟入场,此时静坐调整心态,适当的深呼吸

  2.  打开编辑器并调整为本身喜欢的界面

  3.  熟悉文件目录,写好准确无误的代码模板

  4.  压缩包或许还不能解压,可是文件名已经能够知道了,在选手目录下用代码模板建好全部文件,包 括.c/cpp/pas、.in、.out

  5.  开始比赛,不要急于看题目,将试题第一页的时间、内存限制等等一字不落地看完

  6.  看题目时不能走神,看完题目后将其纳入某几个框架中,包括:模拟/枚举/搜索/贪心/动态规划/图论/分治

  7.  根据输入数据的范围大体肯定算法复杂度,如下均是可能状况,不绝对:

          20:2^20=一百万,O(2^n),搜索

          100:100^3=一百万,O(n^3),Flody/APSP/搜索

          1000:1000^2=一百万,O(n^2),动态规划/图论

          500000:O(nlog(2,n)),二分答案/二分查找/快排/归并

          1000000:O(n)或O(1),数学问题/改变思惟方向/贪心

8.    写下代码前,必须保证有充足的思考时间,有成熟的想法后再动手

9.    写代码前,尽可能用多而强的数据去测试想到的算法,毕竟代码写完后再测试就浪费不少时间了

10.  不能想一点写一点,就算是输入部分也要在总体思路理清后再写

11.  永远别去写从未接触过的算法/数据结构

12.  有多余时间必定要进行对拍,即3个程序:生成数据、朴素算法、准备交的算法

13.  交以前5分钟千万不要再改动代码,主要留意代码中是否还有测试程序时留下的痕迹

14.  走出考场后,除非已是Day2,永远别对答案

 

 

考前准备秘诀


<一>程序习惯注意

1、Linux与Windows的区别
a) 大小写敏感
i. 在Windows下,文件名大小写不敏感,例如A.PAS 与 a.pas 与 A.pas 与 a.PaS没有区别。
ii. Linux视文件名为二进制数据,因此区分大小写。
iii. 考试时必定要看清题目上要求,区别大小写。
b) 关闭文件
i. Windows在程序退出时默认自动关闭已打开的文件,会把缓存中数据写入硬盘。
ii. 在Linux下必须由程序关闭文件,不然没有被写入硬盘。
c) 回车符与换行符
i. 在Windows下,两行文本间有回车符 (ASCII 13) 和 换行符 (ASCII 10)。
ii. 而在Linux下,只有换行符 (ASCII 10)。
d) Read 与 Readln
i. 因为回车与换行在Windows和 Linux下存在有区别,编程时要格外注意。
ii. 尤为读字符串时,尽可能采用Readln,而不要 While not eof read或While not eofln read。
e) 多余字符过滤
i. Arbiter评测系统有多个插件,分为整数比较(过滤无效字符)和逐字节比较。
ii. 因为评测插件的缘由,注意输出结果时,尽可能不要有多余空格或换行。
iii. 对于一个整数,使用write输出。
iv. 对于多个整数,输出最后一个时不要有多余空格或换行。

v. 对于一个字符串,尽可能使用write总体输出。

2、保存文件
a) 注意文件名,保存要求,目录结构等问题。
b) 某些省份(如 河南)要求同时提交.exe文件,注意不要漏交。

<二>考前十点提醒

1、必定要想好了算法,思路清晰了再编。分析问题时遇到一些即兴问起的状况,立刻要深刻下去,看已有的算法思路是否有问题。经验证实,这种即兴提起的问题每每是决定算法正误的关键问题。这是一种本能的质疑,本能的差错,必定不要想:我一会再来看这个问题。必定要当即想清楚,看算法怎么样处理才能解决这样一个问题。确认算法没有什么错误了再编。若是思路没清晰,算法不对,编到一半时才发现错了,这种状况没有考虑到,浪费了不少时间,或者编完了都还不知道算法是错的,最后因为样例特殊,过了样例,觉得对了,但实际上只得10分,或者根本不得分。
2、对于简单的题,必定要考虑全面,不是编好了程序再来考虑全面,而是想算法的时候就要考虑全面。不要知道个大概就开始写,后来发现一些特殊数据要做特殊处理,又把程序改过去改过来,改得面目全非,最后总是改不对,不但影响心情,并且仍是错的。
3、看题要灵活,不要绊死在一道题,不要怕。NOIP的题不想就作出来,怎么可能,确定是须要想的。可是最好先写好写的题,不必定是前两道题。其实不少时候你是有能力作起的,只是你一看就怕了,也没有去认真想,随便敷衍想了一点特殊状况的算法,认为能够骗到分。但经验证实最后基本是没有分,即便有,最多不过10。时间是3个小时,要积极一点,经验证实,不少题想到必定时候便想出来了。而且很简单。
4、必定要认真读题,读的时候积极思考,看看这某句话究竟是个什么意思,要会转换。特别是对于有时间的问题,到底把时间当作一个点,仍是一个区间,具体题目具体分析,必定要符合题意。题没读懂就开始作,100%是错的。题错,思路也就错,时间浪费了, 数据仍是1个都不过。
5、思考算法的时候,必定要考虑到特殊数据,或一些特殊状况。想好算法,写下各个变量的意义,明确使用的时候都是遵守这些意义的。写下关键的句子,分清各类状况,这个阶段最重要,必定要仔细,不要急着编程。写完了,还要再看各变量是否带对,是否有笔误。等到这些作完了,重复看下整个算法实现过程,等本身解题思路清晰的时候,才开始编程。
6、理清了思路再编程,写好了关键句子再编程,弄清楚了变量再编程,速度会很快,并且正确率也很高。
7、必定要先思考清楚。不少人就是犯不思考就编程这个错误,最后本身就昏了。因而浪费大量时间,并且题也作不出来。必定要避免这种状况。这样就能胜于别人。
8、程序按照思路编完以后,查编译错误。经验证实,刚刚完成的程序不出编译错误的概率基本为0。编译所有修正后,千万不要测样例。经验证实,第一次就把样例过了的概率很低,即便过了,在测本身的特殊数据的时候也会出错。因此,编译完后必定要静态查错。经验代表,静态查错是颇有效果的。基本上每次静态查错均可以找到变量代错的错误。特别是快排的I,J是否带错,DEC,INC是否搞错,SWAP是否是加了VAR等等。试想:若是没有静态查错,就去测样例,若是程序有错,样例不过,影响心情;即便样例过了,由于程序有错,特殊数据也不必定能过;即便特殊数据也过了,程序有错,评测的时候绝对会错。发现错了,影响心情了,仍是要来静态查,心情很差,确定效率低。那还不如一开始就静态查,即便发现错误,得到成就感,心情很好。千万不要慌着去测。要保证程序无错,思路清晰,结构清晰了,而后再去测样例,再去测特殊数据。样例过了不要得意,特殊数据过了不要得意,颇有可能还有不少特殊状况你没有想到。
9、作好心理准备,也许作了两道本身认为会全对的,还作了一道本身认为能过几组的。可能只得50。这也是有过的事情。除了作好那几个步骤,没有其余的办法。认了吧。搬块石头砸天,也是没有用的。
10、树立正确的成败观。体验第一,拿奖第二。每每能从失败中学到更多的东西,获得更多的感悟。成功当然好,失败也不错。成事在天。作到了本身作到的,就是另外一种意义上的成功。

<三>考前时间利用

1、考前几分钟时间,每每能决定成败,因此必定要作好心态调整。不要去想结果,只看过程,努力了就必定不会白费。
2、在别人紧张、坐立不安的时候,你不妨把时间利用起来。依照惯例,考试前几分钟是能够先调试电脑的,因此这时候必定要作些准备:
a) 设置IDE
i. 默认路径
ii. 窗口大小
iii. TAB宽度
iv. 重启IDE
b) 准备文件
i. 建立.in .out
ii. 建立模板
iii. 熟悉计算机,检查有误故障
c) 休息,等待开考

 

 

NOIP前必须记住的30句话

1.比赛前一天晚上请准备好你的各类证件,事先查好去往考场的路线
2.比赛以前请先调整你的屏幕分辨率到你喜欢的大小
3.比赛以前请把编译器的字体调为你平时惯用的字体,尤为是注意这种字体中的逗号,点,1,l这种易混淆的字是否是区分明显
4.在不影响视野的状况下,请将字号尽量调大,方便查错
5.请将题目通读完之后,再开始深刻思考你认为最容易的一道题
6.即便这道题再容易,也不要着急写代码,请先明确本身每一步要干什么后,再开始写,轻敌会是你最大的错误
7.即便这道题看起来再无法作,也不要提前放弃,这个时候纸和笔会是你最好的朋友,本身尝试几个例子,也许你就会找到答案
8.请必定先明确本身要干什么以后再写程序,不要走一步想一步
9.若是这是一道动态规划题,请先把转移方程写在纸上再编程
10.涉及到边界处理、加一减一之类的问题,请在纸上举个例子,标上下标之后,在编程时参照纸上的下标写
11.若是思考30分钟仍一头雾水,没有能够实现的算法,请你果断屏蔽掉100%的那一栏数据,开始写60%,50%乃至30%的算法——在NOIP里面,30分毫不是小数目
12.几个经常使用的复杂度参考:100如下——多是搜索;100~500——N^3,1000~5000——N^2,100000~500000——NlogN,500000以上——N或1
13.若是你发现你旁边的人写得很快,请你放心,他的算法十有八九是错的
14.虽然1s+128MB内存 (这是之前的了,如今应该是 1s + 256MB)  是标准配置,不过也不是每道题都是这样的,仍是请认真阅读试卷首页的试题说明
15.计算内存的方法:数组大小*类型长度/1000 / 1000=所占内存MB数,int(Pascal:longint)类型长度是4, long long  (Pascal: int64)  =8 
16.记不住的话,记住int  (Pascal: longint)  型数组在128MB内存下最大开到2500 0000是比较保险的(占100MB内存)
17.写完程序以后,请必定不要忙着编译,请必定要将你的代码从头至尾通读一遍,也就是静态查错,这是整个编程过程当中最重要的步骤,有的变量重复调用问题调试的话,一个小时也看不出来,静态查错能够一下指出错误
18.静态查错请注意如下方面:
(1)是否写上了using namespace std?    (这是C++的,Pascal就不用了)
(2)数组开得是否够大?
(3)变量类型是否正确?
(4)memset时,所填的sizeof(XX)的XX是否是匹配?大小是否是正确?    (Pascal 是 fillchar)
(5)外层循环与内层循环的i,j是否是混用了?
(6)循环以前,i,j是否认义了?
(7)输入数据都输入了吗?
(8)这个程序是在执行你想让它执行的步骤吗?
19.经过样例后,请你必定不要放松警戒,由于样例并不能覆盖全部的状况,请本身设计几组数据,争取卡死你的程序
20.若是出现问题,请你调试你的程序,请必定要分模块调试,不要从头跟到尾
21.若是你已经设计不出能卡住你的程序的数据,恭喜你能够作下一题了
22.若是你用的是windows,请你注意把system(“pause”)注释掉   ( 针对C/C++,Pascal 不存在 )
23.为了万无一失,请你用return 0结束你的程序  ( 一样 , 针对 C/C++ ,建议是必须加上 )
24.在内存容许的状况下,能开普通队列就不要用循环队列,能开下普通数组就不要用滚动数组
25.在时间容许的状况下,能暴力就暴力,高精度能不压位就不压位,优化不须要的就不要
26.总之,在不超限制的前提下,能不优化就不优化,以减小代码量和出错几率为第一原则
27.当比赛还剩下5~15分钟的时候,请不要再改动你的程序,即便你怀疑它对你的一个输入给出了错误答案,由于你本身算出的结果也有多是错的
28.这个时候请你检查是否注释掉了该注释掉的东西,文件名是否写对,文件夹是否建对,请必定反复检查
29.今年赛制更改,没有人知道究竟会变成什么样,因此,与其瞻前顾后,不如集中精力作出你眼前的题目来的实际
30.请记住,NOIP不怕暴力,怕瞎算,不怕不会,怕不敢,有时间的话必定要写一个暴力程序去对拍,验证算法的正确性