noip考点整理(应该不是很完整……)
部分来自百度百科、其他的博客
一、必须会的
1.暴力:
DFS、BFS、灌水法搜索、回溯搜索、记忆化搜索、启发式搜索、最优性剪枝、可行性剪枝
2.贪心
3.模拟
4.骗分
二、基础算法
1、图论:SPFA、Floyd、Dijkstra、Tarjian、topo排序、Prim、Kruskal
欧拉(回)路、哈密顿回路
2、树:并查集、堆、线段树/树状数组、LCA
3、分治:二分查找、二分答案、求逆序对
4、数论:GCD、BSGS、扩展欧几里得求同余方程、Catalan数、快速幂、快速乘法、差分约束、筛素数
5、字符串:回文串的判定、KMP、hash
6、动态规划:背包、线性DP、区间DP、环形DP等等
7、二分图匹配:匈牙利算法
8、高精度
考试策略:
1.考试开始前,调界面,写模板,写头文件,测试dev是否可用
2.看题目时注意数据范围,时限,仔细,不要猜测出题目没有说明的affairs
3.关于数据范围..
20:O(2^n),搜索
100:O(n^3),Floyed/搜索
1000:O(n^2),动态规划/spfa/最小生成树
500000:O(nlogn),二分答案/快排/线段树/st表/树链剖分/遍历(DFS可能爆栈)
1000000:O(n)或O(1),数学问题/改变思维方向/贪心/kmp/dp
当然只是一般情况下...
4.long long一定注意在传递参数和快速幂中不要开漏了...
还有数论题目
“三年OI一场空,不开longlong见祖宗”
5.以及最近经常把头文件写错(忘记写iostream,忘记写stdio.h之类的...)
6.写代码前想好,能够证明最好证明,否则多出几组特殊数据测试
7.想好需要的每一个函数再开始写,并估算好时间空间复杂度
8.永远不要尝试不熟悉的算法orz...
9.一定要写对拍...
10.千万不要在最后15分钟改代码必错无疑百发百中
11.绝对不要对答案被虐无疑
12.写完一题检查一题,不要赶时间去做T3,保证前两题的正确性,T3除非是遇到了会写的算法,不要思考超过15分钟,直接写骗分
13.写完之后再留45min再检查,数据测试,阅读代码,查看细节
14.查看文件名,有没有把暴力程序交成正解
15.前两题想不出来调不出来不要慌张,根据时间和难度判断好是否继续写继续调,或者先写第三题,,决定之后不要犹豫,不要患得患失
16.避免day1认真day2水
17.检查时,对于学过的知识再过一遍,看看有没有漏掉简单的算法或者小的优化
18.输入换行符的处理
19.看清评测系统,按评测系统选择用lld还是%I64d
20.DFS函数记得写return
21.变量名如time屡错不爽...
22.把memset,memcpy写在for或者dfs里面忘记算复杂度....
23.cout,cin输出不是必须(bignum)不要用,有TLE的风险
比赛常见问题总结
问题:
1、对于noip模拟:前两题在会的情况下码速不够,直接断送第三题的高分机会。
2、偶尔会有没判0、爆栈等丢个5分10分的错误,偶尔会有
3、看到一道题好像会做,一激动就把时间全花在上面了。
4、临近结束,一慌起来,连暴力都不会打。
5、由于时间复杂度估计错误而导致正解不敢打。
6、由于多余的变量查看、数据画图过多等多余步骤引起的时间浪费。
措施:
1、适当提高一点码速,打代码时保持清醒的头脑,时刻明确自己正在干什么、自己要干什么。
2、选择最恰当的方法来码。那句话说得好:“每多一行代码,就多一次把 i 打成 j 的机会。”方法以正确、简洁为优,冗余代码一定去除。
3、多方法调试。眼调、输出调、拍、各种小数据测。时刻警醒拍真的不是万能的。
4、控制好情绪,看题不激动,结束不慌张。深呼吸,念“南无地藏王菩萨”。
5、要有梦想。打目前想到的最优的方法,无论能否过(如果是暴力要顺手加优化)。注意各个版本的程序的存档。
6、出了bug先整体感知,不要一上来就断点。