noip模拟67 solutions
又是一次联考,好像有90多个人一起考吧
好像我第五???在自己\(oj\)上\(zxb\)比我高,就当我是自己学校第二好啦
这次的时间分配还是比较不错,干完第一题,不对不对是读完第一题发现不会做就走人了
去看看第二题,然后得到了本场考试唯一一个\(AC\)的题目
除了第二题剩下的全是暴力
T1 数据恢复
对正解有启发的部分分我拿到了,然而并没有想到正解
需要排序!!
对于父子关系符合顺序的直接不用管它
不符合顺序的,就是说爸爸在儿子后面,直接将儿子放在爸爸下一个就行了
我们可以用并查集维护这个东西,然后用堆排序
T2 下落的小球
这个有一点点移球游戏感觉,还有可重集排列的分层排列
首先我们从上向下遍历我们可以找到每一颗子树内可以掉出去多少个球(也就是这颗子树的叶子节点的\(a\)的加和)
那么这颗子树内的所有节点的球只能通过自己的叶子节点掉出去,
所以我们此时就知道了当前这一颗子树可以留出多少个位置来给上面的球
每一颗子树都有这样一个值,需要将上面的球分配给每一颗子树,这个就可以用可重集排列
注意这里的可重集排列需要将每一颗子树内的出口节点看成相同的节点,等到下一层的时候就拆开了
上面排好序了,每一颗子树的选择顺序也是不一样的,这里仍然是可重集排列
这里有一个小技巧,当我们无法直接算出排列数,或者有限制条件时,我们就可以将大排列拆成一个一个的小排列,最后全部乘起来就是答案了