这次居然能神奇的水到140分(-v-)
T1
这题我是用了一种很神(zhi)奇(zhang)的类似于线段树的算法。。。
如果有空就看吧。。。
解法:
先用深搜搜索整棵树,记录下以当前节点为根时这棵树的节点数,把它设为D数组。
之后从根节点开始第二次深搜,计算出每个节点的区间。
设一个变量ANS,表示当前节点的左区间的值。设B数组表示当前节点的左区间,E表示右区间。
每一次搜索子节点之前,我们都把ANS的值加一。
搜索完全部的子节点后,也把ANS加一。
当前节点的右区间的值=左区间值+以当前节点为根时的节点数*2-1
例如有这样一棵树:
第一次深搜算出D数组,D数组如下(红色字体):
之后计算出根节点的值,左区间为1,右区间为1+5*2-1=10
接下来搜索1的子节点2,把ANS加一。左区间为2,右区间为2+1*2-1=3
之后节点2回溯ANS加一,搜索节点3时又加一。左区间为4,右区间为4+3*2-1=9
搜索节点4,ANS加一,左区间为5,右区间为5+1*2-1=6
之后节点4回溯ANS加一,搜索结点5时ANS再加一。左区间为7,右区间为7+1*2-1=8
最后结果就是这样:
之后我们可以根据这条式子直接判断X是否为Y的祖先:
如果X为Y的祖先,则B[X]<B[Y]且E[Y]<E[X],反之亦然。
本题后记:
这题的方法是我之前在做一道类似的题时无意间找到了关于线段树的知识,然后神奇的灵光一现就AC了。。。
T2
看起来很难实际上很渣
这道题肯定不能死算,否则N!都已经爆炸了。。。
方法是听别人讲的,正在消化中。。。
正解:
一开始先把A队的实力和B队的实力快排,之后定一个指针J表示当前队队员能战胜的实力最强的队员的位置。
之后把(a-b)^2变成a^2+b^2-2ab(具体可以自己去拆一下)
其中a^2要乘J(我也不知道为什么),b^2变成从1到J位的对方队员的实力平方和,b变成实力和。
然后代入到之前的式子里算出A队和B对的总分,最后相减再除以N(茫然中)。
注意因为REAL的精度可能不太够,所以要改成EXTENDED型。
T3
终于水过去了。。。
这次居然神奇的考好了,总结就是能水的题都要水,不能水就输出样例。。。
总结起来就只有一句话:
不水则已,
一水惊人!