除了FFT硬伤不会,赛后均已补完,独立思考万岁!
hdu 4600 Harvest Moon 模拟题
hdu 4601 Letter Tree
题意:给一棵树,每条边是一个字符,有M个询问,询问某个点往下一定步数经过的字符组成的字符串中字典序最大的哈希值。
比赛的时候就大概想到了做法,不过我这么弱,这种细节题还是需要有人帮我验证 = =
大致做法就是先确定每个节点的相对字典序(因为有可能一个点有好几条出边都是同一个字符,所以不能贪心先走字典序大的字符),怎么确定,胡搞一下吧。。
然后我是离线回答询问的,同一层的一起回答就好了,这种类型的题CF上喜闻乐见了,不过代码略长了。
hdu 4602 Partition
题意比较简单,略。
可以想象n个1摆成一行,然后取k个连续的1,取完之后左右两边用隔板随便隔
n > k的时候的总方法数就是
( Pow(2,n-k) + (n-k-1) * Pow(2,n-k-2)%mod ) % mod;
hdu 4603 Color the Tree
思路其实很简单,花了十分钟YY就出来了,关键是怎么设计代码。
解法:alice 和 bob所走的路线肯定是往lca方向走,然后再往对方的方向走!
碰头之后然后选择权值总和大的方向先走,走一步,然后回来,因为走一步之后那个方向就相当于被你掌控了。不用继续深入走下去了。
现在考虑这样一个问题:两个人从同一个点出发,都采取最优策略,最终走的方式肯定是先走第一大的方向,再走第二大的方向,所以一个人得到的分数总和应该是一个点周围的奇数项的和,另一个人得到偶数项的和(先排序)。但是有两个方向的权值和已经被占据了,现在相当于是求去掉两个分支之后重新排序的奇数项和与偶数项和。这个怎么实现了,我一开始想用数据结构的方法,但代码量一下子就上去了,后来鲍老板想到一个方法,其实也挺简单的。
假设一段有序的序列,有两个位置的数要删掉,重新计算奇数项和与偶数项和,
比如 : a1 a2 a3 a4..a(id1).........a(id2).......an
那么显然,id1之前的奇偶性不变,[id1,id2]的奇偶性变了,id2后面的奇偶性不变,所以总共的奇数项和是id1之前的奇数项和 + [id1,id2]之间的偶数项和 + id2之后的奇数项和。
大致算法如上,实际在写的时候还有很多细节。
hdu 4604 Deque
题意:给你一个序列,依次加进一个双端队列,问你最长能得到一个多长的非递减序列。
由于在当前决策的时候要受到后面元素的影响,所以我们不妨逆向考虑问题。
考虑这样的数据
5 4 6 3 7 2 8 1
答案为1 2 3 4 5 6 7 8
假设不考虑相同元素的序列
我们在放5的时候,我们需要知道从右边过来以小于等于4结尾的最长的递增序列的长度 以及 从右边过来以大于等于6的元素结尾的最长的递减序列的长度,这两个序列肯定是不相交的,我们可以将5插入中间,然后合并两个序列,用总长度去更新答案,再用5去更新两种序列。具体实现可以用线段树或树状数组来维护,个人觉得线段树思维简单,方便考虑问题。比如最长的递减序列,dp[i]表示以小于等于i的数结尾的最长递减序列的长度,显然dp[i] = max(dp[i+1~n]+1),只是这里比较特殊,是后缀或者前缀的最大值,可以用树状数组。本质还是数据结构优化DP。
这个题还有个地方要注意,当前的数接上某种序列的时候,到底接上哪一种需要枚举,比如接上大于等于当前数的序列与小于当前数的序列
还有一种是 大于当前数与小于等于当前数
hdu 4605 Magic Ball Game
水题。。
hdu 4606 Occupy Cities
最小路径覆盖
很裸,但是一不小心就会TLE
hdu 4607 Park Visit
水题,树的最长路,CF原题吧
hdu 4608 I-number
水题
hdu 4609 3-idiots
会套FFT就行,先放一放,数学的东西不能急!
hdu 4610 Cards
贪心就好了,关键是要将满足各种条件的卡片看成新的卡片,也就是变成了最多16个种卡片。