首先广搜有20分
对于一个状态 例如2 3 7 中间可以往两侧跳,即2 3 7->1 2 7 / 2 3 7->2 7 11 两侧仅有一个能往中间跳,即2 3 7->3 4 7 那么所有的状态就能表示为一棵二叉树,第一种情况为其两个儿子,第二种为其父亲 问题转换为给定树上的两个结点,求其距离 直接暴力可以得40分 可以构造这样的数据 1 2 1000000000 99999998 99999999 1000000000 这样左边要一直往中间跳上上亿次 我们发现若记前两个数差t1,后两个数差t2,不妨设t1<t2 则左边最多往中间跳(t2-1)/t1次 然后只能右边往中间跳,是一个辗转相除的过程,即在logK的时间内我们可以用这种方法得到某个结点它向上K次后的结点,或者根节点,同时还可以顺便算下深度 那么只要求始终两个状态的深度d1,d2,将较深的调整到同一深度 然后二分/倍增求与lca的深度差x ans=2*x+abs(d1-d2)
题目 1838 [国家集训队 2011] 跳跳棋
2017-04-29 10:55:57
|
|
这思路太机智了……
|