NOIP2018 提高组题解(比较简单的一些思路)

Day1(三道原题祭)
T1:
区间减法不难想到差分。
差分完之后手动模拟一下发现就是把差分数组中的证书加起来就好了,时间复杂度 O ( n ) O(n) O(n)
T2:
有一个非常显然的性质:简化后的货币系统一定是原本的货币系统的子集。所以从小到大判断是否能被比当前这个数小的数组成就好了,这个可以直接用背包实现。
T3:
最小值最大自然想到二分答案。二分答案之后只需要找最多有多少条在树上的路径长度大于二分的答案,判断这个路径是否大于m就行了。找路径条数可以每一个点存储一个值v,表示以这个节点为根的子树内统计完答案之后的以当前节点为一段的最长路径长度,每个点更新答案就把它所有儿子的v值加上那个边权如果大于二分的答案就直接答案++,否则就直接丢到一个multiset里面(一定要是multiset或者map或者set里面存一个pair,我考场上直接用set就咕咕了…)。然后遍历multiset里的元素,在multiset里面二分查找最小的和当前元素之和大于二分的答案的值的那个元素,答案++,然后删除这两个元素。就解决了这道题。
Day2:
T1:
是一棵树(m=n-1)的情况直接对每个节点吧所有出边排序,然后dfs一遍就好了。
如果是环套树(m=n)的情况,找到环之后枚举删除环上的每一条边,然后就是树的情况了,取字典序最小的那一个。
T2:
打表可以过,只不过要打很久。
正解我也不太懂…参见以下大佬的博客:https://www.luogu.org/blog/user22127/solution-p5023
还有一个打表题解的博客链接:https://www.luogu.org/blog/A3080529100/solution-p5023
T3:
其实是一道动态dp的模板题,必选或者不选直接用inf代替矩阵元素就好了,用树剖+线段树或者LCT来维护。

你可能感兴趣的:(其它)