1、前言
迎接NOIP的到来。。。在这段闲暇时间,决定刷刷水题。这里只是作非常简单的一些总结。
2、NOIP2014
<1> 生活大爆炸之石头剪刀布(模拟)
这是一道考你会不会编程的题目。。。方法有很多,预处理输赢矩阵,或者一大堆if什么的乱搞就行了。
<2> 联合权值(搜索)
简单的树上求解问题,由于只需要长度为2的链,只要能够清楚地分析出各种情况,一遍DFS直接出来:自身节点与祖父节点有一对;自身节点与兄弟节点有若干对。在计算权值的时候存在一个优化,即如果每次得到一对之后就计算貌似会超时,我们可以对于每一个点记录与其距离为2的点,求和,最后在相乘。
<3> 飞扬的小鸟(动态规划)
完全背包动态规划+优化。个人感觉70分的裸DP比50分暴力还好拿些,毕竟搜索写起来比较麻烦。但是由于n<=10^5(貌似是的?),O(n^2)是过不了的,需要强加优化至O(n log n)。
<4> 无线网络发射器(模拟)
这道题给我们的教训就是,预估时间复杂度是很重要的。听说考场上有多人加些优化然后跪了的。。。数据范围极小,所以我们暴力枚举地图上所有点,然后求在发射器范围内点的个数,所以这又是一道考你会不会变成的题目。
<5> 寻找道路(搜索/最短路)
正反进行两次搜索(DFS/BFS/SPFA均可,但是推荐BFS+SPFA),第一次求得所有可以经过的点;第二次直接跑就是了。
<6> 解方程 (高精度/哈希/其他)
这次NOIP唯一上点档次的题目吧?30分暴力;50分直接高精度;70分的话就需要一定技巧了,取几个合适的模,然后进行判断,在取模意义下为0就认为是为0。注意到在mod p的情况下,将x和x+kp代入,解显然是相同的,所以随便搞搞就行了。用FFT什么的就不说了。
3、NOIP2013
<1> 转圈游戏(GCD+快速幂)
转圈次数无比之大,但是显然结果是存在循环的。首先通过寻找规律,求得循环节,然后利用快速幂,求得答案。
<2> 火柴排队(逆序对+树状数组)
这道题个人觉得有点非主流。首先我确保我考场上写搜索,写贪心,写动规,但是觉得不会知道逆序对这种东西,况且我YY能力也是有限的。。。。知道逆序对之后,基本就保证80分了,因为直接O(n^2)循环就行了;但是由于100分数据,n<=10^5,故需要利用树状数组优化到O(n log n)。
<3> 货车运输(最大生成树+倍增LCA)
裸生成树30分。对于100分,首先用Kruskal算法求出最大生成树,然后可以利用树上倍增LCA加速。也是刚刚学会的。
<4> 积木大赛(二分)
每次一排排搭积木可以看成一排排删积木,二分查找当前区间中最小值,然后删去,以最小值点为中点,再分别求解。
<5> 花匠(贪心/动态规划)
贪心好!写!多!了!去年这个时候还不是很理解,为自己智商捉急。动规也不是很难,70分很轻松,但是想要100的话需要稍微想一想。强烈推荐贪心。
<6> 华容道(最短路)
60分直接用BFS解决。100分的话需要利用SPFA优化每一遍BFS所走的重复的路。