noip2009
1.潜伏者
这道题非常裸,就是一道按着题意来的一道字符串处理(这处理也太简单了),开个数组储存字母所对应的密文就可以了。
2.Hackson的趣味题
分解质因数以后,根据最小公倍数对应质因数的次数为max(ka,kb),最大公约数对应质因数次数为min(ka,kb)
然后对x的质因数指数进行分类讨论即可。方案数用乘法原理统计。
3.最优贸易
我们需要知道的是对于点x,从起点到x的最小购买代价和从x到终点的最大卖出价格。
如何求?我们知道spfa可以求出单源最短/长路,那么能否得到我们想要的答案呢?
当然可以,两者非常相近,边权和点权完全可以转化。
先对原图做spfa(),求出最小购买代价,然后将所有边反向,再做一遍,求出最大卖出价格。
两者相减,就是答案。
4.靶形数独
这道题是对搜索的考察,有两种解法:启发式搜索+位运算 & DLX作为精确覆盖问题处理。
DLX本质其实和搜索类似,只是带强剪枝的对精确覆盖问题的搜索算法。
这里的搜索如何体现启发式?我们变换一下搜索的顺序,优先搜索确定数字较多的行。
算法本身没什么好讲的,只不过是带位运算的枚举。
noip2010
1.机器翻译
队列配合布尔数组记录信息即可,简单模拟。
2.乌龟棋
动归。用f[a][b][c][d]表示牌1/2/3/4分别还剩a/b/c/d的情况下所能得到的最大分数。
用记忆化搜索形式实现DP即可。
3.关押罪犯
并查集的应用。难以想象这在当年还是超纲的。
由于我们只是要上报最大冲突,那么我们应该尽量避免最大的几场冲突的发生。
用并查集维护信息,直到冲突无法避免,输出答案。
4.引水入城
首先用floodfill确定是否均可被灌溉。
然后可以证明某一水源在沙漠处覆盖的必定是连续区间,否则会是无法全部灌溉的情况。
于是问题转化为如何用最少的给定区间,使其完全覆盖全集。
用dp处理即可。
noip2013
1.转圈游戏
快速幂应用,注意时刻mod防止溢出。
2.火柴排队
做好a,b数组对应的位置后,用树状数组或归并排序计算逆序对个数。
3.货车运输
货车跑的路径必然在最大生成树上,这是最小/大生成树的性质,许多论文里都有提及。
然后我们的问题就是如何求树上两个点路径之间最小的边权。
乍一看居然是LCT的经典应用。开玩笑这是NOIP啊。
LCT的应用是在边权可以修改的情况下,不带修改完全可以用倍增求解。
倍增类似lca,f[a][i]代表a点的2^i辈祖先,minv[a][i]表示a到f[a][i]路径上边权的最小值。
然后在lca的时候顺便用minv更新ans,就可以求出答案了。
4.积木大赛
画图画画就可以找到规律了,实际上的层数是跟拐点有关的。
一个峰必然是单独的被铺的,但是山脚会和其他峰共用。
那么我们只要在峰顶时把高度加上,把共用的重复计算给减掉,就可以得到答案了。
5.花匠
n^2的动归还是蛮好想的,至少当年刚学的动归都可以想出来。
怎么优化成nlogn,当然是用数据结构了。
6.华容道
还没写,下次补上。